在 Python 的子进程中生成一个线程

And*_*ndy 5 python multithreading multiprocessing

我有一组 60 个对象,每个对象我都想拥有自己的threading.Thread. 由于 Python 的锁定和诸如此类的原因,为了进一步分解这一点,我想生成子进程(使用multiprocessing.Process),并在Threads每个Process. 我将我的对象分解成二维list,使它们更容易循环,这样 obj[] 索引代表Process数字,并且 obj[][] 中的每个元素都是我正在使用的对象之一 as 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))
Run Code Online (Sandbox Code Playgroud)

问题是线程实际上并没有产生,除非我join()start()调用后添加。由于这消除了我对多线程的渴望(我可以只使用for循环并完成相同的事情),我不完全确定该怎么做。

当涉及到这个线程问题时,我完全是个菜鸟,所以你的答案越愚蠢,所有参与者就越容易。谢谢。

And*_*ndy 3

由于 Python 基本上使用线程来生成进程,因此我决定使用 60 个进程。这应该能够(基本上)实现我的目标;它只会使任务管理器中的进程选项卡有点崩溃。;)