0

首先,我将解释我的脚本的结构:

Script1 --(call)--> Script2 函数,该函数通过多处理进一步调用不同脚本中的12-15个函数,在这些函数中有些有无限循环,有些有线程。
包含线程的函数进一步调用了一些在其中具有无限循环的函数。

多处理的代码就像:

Script1.py
def func1():
   #some infinite functionality
Script2.py
def func2():
   #some infinite functionality
Script3.py
def func3():
   #Thread calling
#..
#..
#and so on...

from multiprocessing import Process
from Script1 import func1
from Script2 import func2
from Script3 import func3
process=[]
process.append(Process(target=func1))
process.append(Process(target=func2))
process.append(Process(target=func3))
process.append(Process(target=func4))
process.append(Process(target=func5))
process.append(Process(target=func6))
# ..
# ..
# and so on.

for p in process:
    p.start()
    print("process started:", p)

for p in process:
    p.join()
    print("process joined:", p)

现在我面临的问题是:

  1. 它只打印第一个加入的打印语句,但所有进程都成功启动。(这意味着加入所有未执行的进程)。
  2. 其次,是一些进程变成僵尸,当运行多处理但没有多处理时,当函数在外部运行时效果很好(所以在这里我知道由于某些问题连接不能正常工作,我们的功能很好)。
  3. 第三,在我的情况下,我应该使用多处理。池或多处理。流程适合我吗?有什么建议吗?
  4. 第四,我想知道,除了多线程和多处理之外,是否还有其他选择。游泳池可能吗?

我也尝试了不同的事情,但没有像这样工作:

set_start_context('spawn')

因为它单独在外部运行每个进程,就像我们在外部通过 popen 运行脚本一样,据我所知

注意:
我使用的是 Ubuntu 16.04。我有一个可以使用多处理的场景。进程,多进程。池和类似多处理的东西,但不能在这里使用多线程。

4

0 回答 0