产生另一个python进程并获取其返回对象

时间:2017-06-22 21:24:50

标签: python

假设您有一个单例可以使用(这意味着将其初始化为原始状态的唯一方法是重新启动整个脚本)并且您希望多次执行特定任务并获取返回的对象。有没有办法在没有磁盘I / O的情况下做到这一点?我知道我可以使用subprocess.check_output() stdio和文件I / O或管道result = foo()来做到这一点,但是有任何更简洁的解决方案就像同一个进程通信一样简单(编辑:我的意思是, #the singleton def foo(): crash_when_got_run_twice() result = something_fancy() return result #the runner def bar(times): for i in range(times): result = magic() # run foo() aggregate_result(result) return aggregated_result() )?

magic()

您认为$(this).html(sourcesArray[tableNumber-1].forecast[i].alt.high)可以做什么?

1 个答案:

答案 0 :(得分:1)

在类似unix的系统上,您可以分叉子进程并使其运行单例。假设您已经导入了单例所需的所有内容,并且单例本身不会触及磁盘,则可以正常工作。公平警告:无论出于什么原因,这个东西首先是单身人士可能会扼杀你。你可以让多处理包为你做繁重的工作。

在Windows上,执行一个新的python解释器,父节点和子节点之间可能存在重要的状态,这可能会产生有害影响。但同样,它可能会起作用......

import multiprocessing as mp

#the singleton
def foo():
    crash_when_got_run_twice()
    result = something_fancy()
    return result

def _run_foo(i):
    return foo()

#the runner
def bar(times):
    with mp.Pool(min(mp.cpu_count(), times) as pool:
        return pool.map(_run_foo, range(times))