Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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
Python 确认对多处理模块和线程启动方式的理解_Python_Multiprocessing - Fatal编程技术网

Python 确认对多处理模块和线程启动方式的理解

Python 确认对多处理模块和线程启动方式的理解,python,multiprocessing,Python,Multiprocessing,嗨,我不确定我是否理解多处理模块,并想寻求建议。我正在回顾这里找到的无痛并发示例。下面是我正在测试的代码 import multiprocessing import time x = 4 y = 6 def f1(x,y): x = x+y print 'F1:', x def f2(x,y): y = x-y print 'F2:', y def main(): print "Starting main program" hilo1

嗨,我不确定我是否理解多处理模块,并想寻求建议。我正在回顾这里找到的无痛并发示例。下面是我正在测试的代码

import multiprocessing
import time

x = 4
y = 6

def f1(x,y):

    x = x+y
    print 'F1:', x


def f2(x,y):
    y = x-y
    print 'F2:', y


def main():
    print "Starting main program"
    hilo1 = multiprocessing.Process(target=f1, args=(x,y))
    hilo2 = multiprocessing.Process(target=f2, args=(x,y))
    print "Launching threads"
    hilo1.start()
    hilo2.start()
    hilo1.join()
    hilo2.join()
    print "Both threads finished"
    print "Ending program"
    print "X:", x, "Y:", y


if __name__=='__main__':
    main()
输出为:

Starting main program
Launching threads
Both threads finished
Ending program
X: 4 Y: 6
我期待着更接近于:

Starting main program
Launching threads
F1: 10
F2: -2
Both threads finished
Ending program
X: 4 Y: 6
这是我将main更改为以下内容时的输出:

def main():
    print "Starting main program"
    hilo1 = f1(x,y)
    hilo2 = f2(x,y)
    print "Launching threads"
    print "Both threads finished"
    print "Ending program"
    print "X:", x, "Y:", y

多处理线程正在运行吗?检查每个函数是否使用多处理运行的最佳方法是什么?

您运行脚本的环境是什么?CLI?闲置的当我通过CLI运行此命令时,它输出的正是您期望它输出的内容。我怀疑你用来启动运行脚本的任何东西都会丢失子进程的输出。我正在空闲状态下运行脚本。你有什么建议不丢失子进程的输出吗?你的错误是认为这些线程实际上是进程。进程的共享不如线程多,例如,输出设备可能不会被继承。@MarkRansom感谢您提供的信息。我能够使用线程模块而不是多处理模块来获得所需的结果。我需要仔细阅读两者之间的差异