多线程
1、使用threading模块创建线程
方式一:把函数传入并创建Thread实例,然后调用start方法开始执行
# coding=utf8
"""
创建多线程的方式一:
把函数传入并创建Thread实例,然后调用start方法开始执行
"""
import random, time
import threading
def thread_run(urls):
print 'Current thread %s is running...' % threading.current_thread().name
for url in urls:
print '%s -->>> %s' % (threading.current_thread().name, url)
time.sleep(random.random())
print '%s ended.' % threading.current_thread().name
if __name__ == '__main__':
print 'Current thread %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类,重写__init__和run方法
# coding=utf8
'''
创建多线程方式二:
继承Thread类,重写__init__和run方法
'''
import threading
import time, random
class myThread(threading.Thread):
def __init__(self, name, urls):
threading.Thread.__init__(self, name=name)
self.urls = urls
def run(self):
print 'Current thread %s is 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
if __name__ == '__main__':
print 'Current thread %s is running...' % threading.current_thread().name
t1 = myThread(name='Thread_1', urls=['url_1','url_2','url_3'])
t2 = myThread(name='Thread_2', urls=['url_4','url_5','url_6'])
t1.start()
t2.start()
t1.join()
t2.join()
print '%s ended.' % threading.current_thread().name