这是一个新手问题:
类是一个对象,因此我可以创建一个名为的类,pippo()
并在此add函数和参数内部,我不知道pippo
在分配时是内部函数是从上向下执行x=pippo()
还是必须以x.dosomething()
外部调用pippo
。
使用Python的多处理程序包,是更好的方法是定义一个大函数并使用target
调用中的参数创建对象Process()
,或者通过从Process
类继承来创建自己的流程类?
我经常想知道为什么Python的有关多处理的doc页面仅显示“功能性”方法(使用target
参数)。可能是因为简洁的代码段最适合用于说明目的。对于适合一个功能的小任务,我可以看到这是首选的方式,ala:
from multiprocessing import Process
def f():
print('hello')
p = Process(target=f)
p.start()
p.join()
但是,当您需要更大的代码组织(用于复杂的任务)时,创建自己的类是可行的方法:
from multiprocessing import Process
class P(Process):
def __init__(self):
super(P, self).__init__()
def run(self):
print('hello')
p = P()
p.start()
p.join()
请记住,每个生成的进程都使用主进程的内存占用量副本进行初始化。而且构造函数代码(即内部的东西__init__()
)是在主进程中执行的-
只有内部的代码run()
在单独的进程中执行。
因此,如果某个进程(主进程或生成的进程)更改了其成员变量,则该更改将不会反映在其他进程中。这,当然,是唯一真正的储存卡,在类型,如bool
,string
,list
,等。但是,您可以导入“特殊”的数据结构,从multiprocessing
其中将被透明的过程(见之间共享模块进程间共享状态。)或者,您可以创建自己的IPC(进程间通信)渠道,例如multiprocessing.Pipe
和multiprocessing.Queue
。
问题内容: 我试图从multiprocessing.Process获取一个追溯对象。不幸的是,通过管道传递异常信息不起作用,因为无法腌制回溯对象: 追溯: 还有另一种访问异常信息的方法吗?我想避免传递格式化的字符串。 问题答案: 使用您可以传递包装的异常并在以后重新引发它们: 因此,如果您在远程进程中捕获到异常,则将其包装,然后将其传递回去。调用主流程即可完成工作。
问题内容: 在python中使用multiprocessing.Process类时,是否有办法记录给定Process的stdout输出? 问题答案: 最简单的方法可能是覆盖。从多处理手册中稍微修改一个示例: 并运行它:
问题内容: 在下面的示例代码中,我想恢复该函数的返回值。我该怎么做呢?此值存储在哪里? 示例代码: 我似乎在中存储的对象中找不到相关的属性jobs。 问题答案: 使用共享变量进行通信。例如这样:
问题内容: 我已经使用Python多处理模块在Monte Carlo代码中实现了一些简单的并行性。我有看起来像的代码: 但是,当我查看结果列表时,似乎蒙特卡洛迭代器尚未启动。我知道它们有,因为我可以让这些过程在蒙特卡洛步骤中打印出信息。所以我在做些愚蠢的事情。我以为job.join()会阻止结果列表被构建,直到一切运行完毕,因此mc.results字段将被更新。 我意识到我还没有告诉您我的Mont
问题内容: 所以这是我的问题,我必须为我的CS课做一张照片,这在使用Turtle进行估算时确实令人沮丧。我计划使用.onclick()来显示位置。 乌龟文档似乎说onclick将在带有两个变量的函数中传递坐标。 http://docs.python.org/3.1/library/turtle.html#turtle.onclick 注意:当我单击箭头时,它可以工作,但这不是我想要的。我想单击屏幕
通过使用Python操控Codey Rocky,您可以: 和实物结合,更有趣地学习Python 比拖放语句块更方便地编写有一定规模的代码,比如实现算法 使用积木式编程很难做到的事情,比如使用字典等数据结构 为Codey写的Python程序,一定要上传到Codey之后才能生效。 开始使用Python 通过将和脚本区上方的编程方式从“语句块”切换成“Python”即可开始编写Python。 注意:请确