python的标准库提供两个模块:
- thread是低级模块
- threading是高级模块,对thread进行了封装
一、threading
#!coding:utf-8
import threading
import time, random
# 新线程执行的代码
def thread_run(urls):
print('Current %s in running...' % threading.current_thread().name)
for url in urls:
print("%s -->>> %s" % (threading.current_thread().name, url))
time.sleep(random.random())
print('%s is running...' % threading.current_thread().name)
t1 = threading.Thread(target=thread_run, name='Thread_1',args=(['url_1','url_2','url_3'],))
t2 = threading.Thread(target=thread_run, name='Thread_2',args=(['url_4','url_5','url_6'],))
t1.start()
t2.start()
t1.join()
t2.join()
print('%s ended.' % threading.current_thread().name)
二、thread
#!coding:utf-8
import threading
import time, random
# 直接从threading.Thread继承并创建线程类,然后重写__init__方法和run方法
class myThread(threading.Thread):
def __init__(self, name, urls):
threading.Thread.__init__(self, name=name)
self.name = name
self.urls = urls
def run(self):
print('Current %s in running...' % threading.current_thread().name)
for url in self.urls:
print("%s --->>> %s" % (threading.current_thread().name, url))
time.sleep(random.random())
print("%s ended." % threading.current_thread().name)
t1 = myThread(name='Thread_3' ,urls=['url_1', 'url_2', 'url_3'])
t2 = myThread(name='Thread_4' ,urls=['url_4', 'url_5', 'url_6'])
t1.start()
t2.start()
t1.join()
t2.join()
print('%s ended.' % threading.current_thread().name)