如何检查 Python Multiprocessing 中的 Process 类是不是有效?

Posted

技术标签:

【中文标题】如何检查 Python Multiprocessing 中的 Process 类是不是有效?【英文标题】:How can I check that the Process class from Python Multiprocessing has worked?如何检查 Python Multiprocessing 中的 Process 类是否有效? 【发布时间】:2020-11-11 23:53:02 【问题描述】:

我编写了以下代码,该代码运行一个模拟一系列化学反应的随机模拟的函数。我写了以下代码:

v = range(1, 51)
def parallelfunc(*v):     
    gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)

def info(title):
    print(title)
    print('module name:', __name__)
    print('parent process:', os.getppid())
    print('process id:', os.getpid())

if __name__ == '__main__':
    info('main line')
    start = datetime.utcnow()
    p = Process(target=parallelfunc, args=(v))
    p.start()    
    p.join()
    end = datetime.utcnow()
    sim_time = end - start
    print(f"Simualtion utc time:\nsim_time")

我正在使用多处理库中的 Process 方法,并尝试运行 gillespie_tau_leaping 50 次。

只有我不确定它是否有效。 gillespie_tau_leaping 向终端打印出一些值,但这些值只打印一次,我希望它们被打印出 50 次。

我尝试使用getpid etc 命令,这会将以下内容返回到终端:

main line
module name: __main__
parent process: 6188
process id: 27920

如何判断我的代码是否正常工作以及如何让它将 gillepsie_tau_leaping 中的值打印 50 次到终端?

干杯

【问题讨论】:

【参考方案1】:

您的代码只运行一个进程,对Process 的调用会生成一个新线程,但您只执行一次(不是循环)。

我建议你使用multiprocessing pools 你的代码可以是这样的:

from multiprocess import Pool
def parallelfunc(*args):
    do_something()

def main():
   # create a list of list of args for the function invocation
   func_args = [['arg1call1', 'arg2call1', 'arg3call1'], ['arg1call2', 'arg2call2', 'arg3call2']]
   with Pool() as p:
      results = p.map(parallelfunc, func_args)
   # do something with results which is a list of results

multiprocessing pool 默认情况下会创建与您的 CPU 内核相同数量的进程,并管理进程 Pool 直到处理结束时处理所有进程间通信。 这真的很方便,因为同步进程可能很困难。

希望对你有帮助

【讨论】:

以上是关于如何检查 Python Multiprocessing 中的 Process 类是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查运行我的脚本的 Python 版本?

如何检查python中是不是存在文件? [复制]

如何进行PYTHON语法检查

Python 究竟是如何检查列表的?

如何检查Python中是不是存在方法?

如何检查变量是不是是Python中的字典?