方法1
from threading import Thread
t = Thread(target=func, args=(1,))
t.start()
方法2
from threading import Thread
class MyThread(Thread):
def __init__(self, sid):
self.sid = sid
Thread.__init__(self)
def run(self):
handle(self.sid)
threads = []
for i in range(1, 11):
t = MyThead(1)
threads.append(t)
t.start()
for t in threads:
t.join() # 阻塞函数
方法3
import threadpool
def run(arg):
"""
主函数
"""
return arg
# 参数列表
args = [a1, a2, a3, a4, a5]
# 使用多线程启动
pool = threadpool.ThreadPool(10) #启动10个线程
requests = threadpool.makeRequests(run, args)
[pool.putRequest(req) for req in requests]
pool.wait()
当函数有多个参数的情况,函数调用时第一个解包list,第二个解包dict,所以可以这样
def hello(m, n, o):
""""""
print "m = %s, n = %s, o = %s"%(m, n, o)
if __name__ == '__main__':
# 方法1
lst_vars_1 = ['1', '2', '3']
lst_vars_2 = ['4', '5', '6']
func_var = [(lst_vars_1, None), (lst_vars_2, None)]
# 方法2
dict_vars_1 = {'m':'1', 'n':'2', 'o':'3'}
dict_vars_2 = {'m':'4', 'n':'5', 'o':'6'}
func_var = [(None, dict_vars_1), (None, dict_vars_2)]
pool = threadpool.ThreadPool(2)
requests = threadpool.makeRequests(hello, func_var)
[pool.putRequest(req) for req in requests]
pool.wait()
加上进度条
import concurrent.futures
from tqdm import tqdm
import time
def f(x):
time.sleep(0.001) # to visualize the progress
return x**2
def run(f, my_iter):
with concurrent.futures.ThreadPoolExecutor() as executor:
results = list(tqdm(executor.map(f, my_iter), total=len(my_iter)))
return results
my_iter = range(100000)
run(f, my_iter)