python在后台运行行

2024-06-01 00:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张类似于

import numpy as np
x = np.array([1,2,3])
y = np.array([2,3,4])

ris1 = function1(x, y) # slow 
ris2 = function2(x, y) # slow
ris3 = function3(x, y) # slow

ris = function4(ris1,ris2,ris3)

函数1、2、3不修改值x、y,它们是完全独立的。我想开始ris2和ris3的评估,即使ris1还没有完成。最后我想用所有的结果一起。我该怎么做?你知道吗

我知道可以使用joblibmultiprocessing模块进行一些并行化,但是由于语法的复杂性,我希望避免使用mapfor comprehension。你知道吗


Tags: 函数importnumpyasnparrayslowfunction1
1条回答
网友
1楼 · 发布于 2024-06-01 00:05:48

实现异步的可能方法将给代码带来更多的复杂性。更好的方法是使用多处理或线程库。在多重处理的情况下,如果您不想使用map的语法复杂性,您可以使用如下代码所示的process方法。我不确定这个情结是否适合你。你知道吗

import multiprocessing as mp
import numpy as np

# Define an output queue
output = mp.Queue()

x = np.array([1,2,3])
y = np.array([2,3,4])

def function1(x, y, pos):
  output.put((pos, x * y))

def function2(x, y, pos):
  output.put((pos, x * y))

def function3(x, y, pos):
 output.put((pos, x * y))

# Setup a list of processes that we want to run
processes = [mp.Process(target=function1, args=(x, y, 1, output)),
             mp.Process(target=function2, args=(x, y, 2, output)), 
             mp.Process(target=function3, args=(x, y, 3, output))]

# Run processes
for p in processes:
  p.start()

# Exit the completed processes
for p in processes:
  p.join()

# Get process results from the output queue
results = [output.get() for p in processes]
results.sort()
results = [r[1] for r in results]

ris = function4(*results)

相关问题 更多 >