我有一组60个对象,每个对象都有自己的threading.Thread
。为了通过Python的锁定和诸如此类的方法进一步打破这一点,我希望产生子流程(使用multiprocessing.Process
),并且每Threads
使用6 Process
。我将我的对象分解为二维list
以使它们更容易循环,这样obj []索引代表Process
数字,obj [] []中的每个元素都是其中之一我作为Threads
使用的对象。所以这是细分:
# break the objects out into my 2D list
obj= []
for i in all_obj:
if len(obj) == 0 or len(obj[len(obj)-1]) > 5:
obj.append([])
obj[len(obj)-1].append(i)
# spawn processes
processes = []
for i in obj:
processes.append(Process(target=proc_run,args=(i))
processes[len(processes)-1].start()
# process target
def proc_run(my_objs):
threads = []
for ad in my_objs:
threads.append(Thread(target=thread_run,args=(ad))
threads[len(threads)-1].start()
# thread target
def thread_run(my_obj):
for i in range(1,21):
## do some stuff with the object here
pass
logging.info("Thread for object <%s> finished."%(my_obj.prop))
问题是线程实际上并没有产生,除非我在join()
调用后添加start()
。由于这消除了我对多线程的渴望(我可以使用for
循环并完成同样的事情),我不完全确定该怎么做。
当谈到这种线程时,我是一个完全的菜鸟,所以你可以做出更多愚蠢的回答,对所有参与者来说都更容易。感谢。
答案 0 :(得分:2)
由于Python基本上使用线程来生成进程,所以我决定使用60个进程。这应该(基本上)允许我的目标;它只会使任务管理器中的进程选项卡爆炸一点。 ;)
答案 1 :(得分:0)
Process
(在multiprocessing
的至少某些版本中)只要target
函数返回就会终止进程(因此,所有线程)。您需要join()
才能在线程完成后才能实现这一点,但是您将join()
置于循环之外,以便等待,而它们都在运行。