Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在python2/3中同时使用多个不同方法进行多处理吗_Python_Subprocess - Fatal编程技术网

我可以在python2/3中同时使用多个不同方法进行多处理吗

我可以在python2/3中同时使用多个不同方法进行多处理吗,python,subprocess,Python,Subprocess,我想让我的两种不同的方法同时进行。 我希望通过多处理器来完成,但是我发现所有的例子都是在多处理器上使用相同的方法,而不是在多处理器上使用不同的方法。 我的代码如下,它是按顺序进行的,而不是按顺序进行的 #-*-coding:utf-8-*- import multiprocessing import time #def thread_test(num1,num2): #x=5 def haha(num1): for i in range(num1): time.sleep(

我想让我的两种不同的方法同时进行。 我希望通过多处理器来完成,但是我发现所有的例子都是在多处理器上使用相同的方法,而不是在多处理器上使用不同的方法。 我的代码如下,它是按顺序进行的,而不是按顺序进行的

#-*-coding:utf-8-*-
import multiprocessing
import time
#def thread_test(num1,num2):
#x=5
def haha(num1):
    for i in range(num1):
       time.sleep(1)
       print('a')
def hehe(num2):
    for i in range(num2):
        time.sleep(1)
        print('b')
if __name__=='__main__':

        pool = multiprocessing.Pool(processes=4)
        pool.apply_async(haha(5))
        pool.apply_async(hehe(5))
        pool.close()
        pool.join()
        print("done")
印刷品如下

a
a
a
a
a
b
b
b
b
b
done

我想这已经得到了回答,但我找不到重复的地方,我需要更多的评论来描述正在发生的事情,所以这里是:

代码的问题在于,实际上您没有在不同的进程中执行函数。相反,您尝试在新流程中执行函数的返回值
haha
hehe
。由于您没有定义任何
return
值,因此它们返回
None

.apply\u async
(和类似的函数)需要使用裸函数名作为第一个参数调用,然后使用参数作为第二个参数调用(包装为
元组
)。这是需要的,因为Python(以及几乎所有其他编程语言)定义了执行顺序,其中函数argumnets在函数本身之前进行求值。因此,当调用一个参数为另一个函数调用的函数时,首先计算内部函数调用

因此,解决方案是调用外部函数,而不是使用内部函数调用,而是使用裸函数名(然后用作内部函数的引用),然后将内部函数的参数作为外部函数的单独参数。这样,在外部函数开始执行之前,就没有什么可计算的了。因此,对于目前的情况,解决方案很简单。只需将代码更改为:

#-*-coding:utf-8-*-
import multiprocessing
import time

def haha(num1):
    for i in range(num1):
       time.sleep(1)
       print('a')

def hehe(num2):
    for i in range(num2):
        time.sleep(1)
        print('b')

if __name__=='__main__':
        pool = multiprocessing.Pool(processes=4)
        pool.apply_async(haha, (5,)) # instead of pool.apply_async(haha(5))
        pool.apply_async(hehe, (5,)) # instead of pool.apply_async(hehe(5))
        pool.close()
        pool.join()
        print("done")

我希望这个解释对您有意义,并帮助您在将来注意这些情况。

我明白了。在我看来,我的func在被放入池中之前已经完成了。非常感谢,你说的话教会了我很多。