python - 如何检查 Python Multiprocessing 中的 Process 类是否有效?
问题描述
我编写了以下代码,它运行一个模拟一系列化学反应的随机模拟的函数。我编写了以下代码:
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:\n{sim_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 次的值打印到终端?
干杯
解决方案
您的代码只运行一个进程,对 的调用会Process
产生一个新线程,但您只执行一次(而不是在循环中)。
我建议您使用多处理池 您的代码可以是这样的:
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
默认情况下,池创建与您的 CPU 内核相同数量的进程并管理进程池,直到处理结束时处理所有进程间通信。这真的很方便,因为同步进程可能很困难。
希望这可以帮助
推荐阅读
- matlab - MATLAB 无法从串行 COM 端口读取数据
- python - 为什么我的 ROC 分数和 ROC 曲线显示不同的值?
- r - 在 freeBSD 中使用 Flang 编译 R 失败
- pandas - 如何在不读取所有数据的情况下获取此 CSV 的前 100 行
- reactjs - 如何使 React 函数推断打字稿类型?
- r - 保留基于先前行满足条件的数据行
- javascript - 使用 nodemailer、gmail(如果重要,可以使用 gcloud 主机)在生产环境中不会发送电子邮件。本地主机很好但是
- c++ - 重复符号错误 - 我在做我的包含吗?
- python - 从序列化程序生成表单
- javascript - 使用 MutationObserver 用另一个 div 的内容更新 iframe 内容