python - 如何从两个不同的函数将值附加到同一个数组?
问题描述
当前代码
import multiprocessing as mu
import time
global_array=[]
def add_array1(array):
while True:
time.sleep(2.5)
global_array.append(1)
print(global_array)
def add_array2(array):
while True:
time.sleep(3)
global_array.append(2)
print(global_array)
def runInParallel(*fns):
if __name__=='__main__':
proc = []
for fn in fns:
p = mu.Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()
runInParallel(
add_array1(global_array),
add_array2(global_array)
)
在上面运行我的代码时,只有第一个函数add_array1()
将值附加到数组并打印,而不是两个函数都提供错误的输出:
[1]
[1,1]
[1,1,1]
当以下代码的实际所需输出为:
[1]
[1,2]
[1,2,1]
[1,2,1,2]
解决方案
你的问题是函数调用
runInParallel( add_array1(global_array), add_array2(global_array))
执行函数并将函数调用的返回值作为参数提供给runInParallel
. 作为add_array1
一个无限循环,它永远不会从执行中返回。您需要将函数作为函数提供- 而不是函数的返回值作为参数runInParallel(...)
从...开始
runInParallel( add_array1, add_array2) # name of the functions, dont execute em
和改变
def runInParallel(*fns):
proc = []
for fn in fns:
p = mu.Process(target=fn, args=(global_array,)) # provide param here
p.start()
proc.append(p)
for p in proc:
p.join()
然后修复由于您的线程函数永远不会返回的“不加入”问题。
来自multiprocessing.Process 官方文档的示例:
from multiprocessing import Process import os def info(title): print(title) print('module name:', __name__) print('parent process:', os.getppid()) print('process id:', os.getpid()) # Function name is f def f(name): info('function f') print('hello', name) if __name__ == '__main__': info('main line') # f is provided, and args is provided - not f("bob") p = Process(target=f, args=('bob',)) p.start() p.join()
推荐阅读
- reactjs - 使用 React 连接到 express 后端时遇到问题
- javascript - 如何使用 useState 设置朋友?
- go - 切片使用不当会导致意想不到的副作用
- sql - 如何在 golang 应用程序中创建具有多个 JSON 参数的 SQL 查询?
- nginx - 谁导致了这个“502 Bad Gateway nginx”?
- r - 如何获取使用 write.xlsx 或 R 中的其他函数保存的文件的文件路径?
- android - Intent 用于打开带有特定搜索文本的谷歌地图
- java - 使用 google bot 的网页收集器
- python-3.x - 有没有办法在holoviews Sankey图中过滤维度
- flutter - Flutter - 如何在没有动画的情况下直接从底部启动列表视图?