我正在运行一个I / O密集型程序,方法是使用multithreading.Pool库将其分成许多进程。当我在Python 3.6上的Jupiter中运行代码时,没有任何问题。
但是,当我在Django服务器上运行完全相同的代码时,有时,线程根本就不会加入。这与Jupiter笔记本的输入相同。我知道线程/进程已完成执行,因为我在每个线程的开头和结尾都有打印语句,并且可以看到所有线程都已完成,但是它们根本没有加入。
我的代码如下:
from multiprocessing import Pool
def run_thread(arg_one, arg_two):
print ("Thread started")
# Do stuff
print ("Thread ended")
thread_list = []
pool = Pool(processes = number_of_processes, maxtasksperchild = 500)
for key, val in some_dict.items():
# Run thread
thread_list.append(pool.apply_async(run_thread, (arg_one, arg_two))
pool.close()
pool.join()
print ("All processed have joined.")
我已经查看了其他一些答案,并且发现了类似这样的内容:
from multiprocessing import Pool
def run_thread(arg_one, arg_two):
print ("Thread started")
# Do stuff
print ("Thread ended")
thread_list = []
pool = Pool(processes = number_of_processes, maxtasksperchild = 500)
for key, val in some_dict.items():
# Run thread
thread_list.append(pool.apply_async(run_thread, (arg_one, arg_two))
for t in thread_list:
try:
t.get(timeout = 5)
except:
print ("Timeout occurred")
pool.close()
pool.join()
print ("All processed have joined.")
我想要的是,如果线程在超时间隔内运行,只需杀死它并继续前进即可。在上述解决方案中,我仍然必须等到所有线程都运行后才能到达最终的打印语句,其中显示“所有进程都已加入”。
请原谅我对线程/进程的使用。我的意思是在每种情况下都是过程。