如何在多处理参数中使用函数指针

2024-09-27 19:26:35 发布

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

我有几个函数使用相同的参数,如下所示

def cat(time , dist)
    return random.randint(1, 400) * time + random.randint(1, 5) * dist

def dog(time , dist)
    return random.randint(1, 300) * time + random.randint(1, 7) * dist

def rabbit(time , dist)
    return random.randint(1, 200) * time + random.randint(1, 3) * dist

def turtle(time , dist)
    return random.randint(1, 100) * time + random.randint(1, 1) * dist


if __name__ == '__main__':
    FunArray = {
        1:cat
        2:dog
        3:rabbit
        4:turtle
    }
    pool = multiprocessing.Pool(processes=2)
    q=10
    for i in xrange(1,4):
        workers = pool.apply_async(FunArray[i], args=(i, q))
    pool.close()
    pool.join()

我只想同时运行两个进程,我想使用一个函数指针来传递进程的函数名。然而,这个程序不起作用。在


Tags: 函数参数returntime进程distdefrandom
1条回答
网友
1楼 · 发布于 2024-09-27 19:26:35

首先有一些语法错误:

  • 没有:函数定义头的结尾。在

    def cat(time , dist):
                        ^
    
  • 字典文字的每一项后面都没有,

    1:cat,
         ^
    
  • if __name__ == "__main__"块应该缩进。

没有导入randommultiprocessing的import语句

FuncArray实际上是一本字典。在

xrange(1, 4)产生1,2,3。(4除外)。如果你想得到1,2,3,4,你应该使用xrange(1, 5)。但是,我宁愿直接用enumerate来迭代列表。在

您需要保存workers引用以便稍后返回结果。在


import random
import multiprocessing

def cat(time , dist):
    return random.randint(1, 400) * time + random.randint(1, 5) * dist

def dog(time , dist):
    return random.randint(1, 300) * time + random.randint(1, 7) * dist

def rabbit(time , dist):
    return random.randint(1, 200) * time + random.randint(1, 3) * dist

def turtle(time , dist):
    return random.randint(1, 100) * time + random.randint(1, 1) * dist


if __name__ == '__main__':
    funcs = [cat, dog, rabbit, turtle]
    pool = multiprocessing.Pool(processes=2)
    q=10
    workers = []
    for i, func in enumerate(funcs):
        worker = pool.apply_async(func, args=(i, q))
        workers.append(worker)
    for worker in workers:
        print worker.get()
    pool.close()
    pool.join()

相关问题 更多 >

    热门问题