多处理代码重复运行

2024-01-23

所以我希望使用 python 多处理模块创建一个进程,我希望它成为更大脚本的一部分。 (我还想从中得到很多其他东西,但现在我会满足于此)

我从以下位置复制了最基本的代码多处理文档 https://docs.python.org/3.6/library/multiprocessing.html并稍作修改

然而,一切之外的if __name__ == '__main__':语句得到repeated每次调用 p.join() 时。

这是我的code:

from multiprocessing import Process

data = 'The Data'
print(data)

# worker function definition
def f(p_num):
    print('Doing Process: {}'.format(p_num))

print('start of name == main ')

if __name__ == '__main__':
    print('Creating process')
    p = Process(target=f, args=(data,))
    print('Process made')
    p.start()
    print('process started')
    p.join()
    print('process joined')

print('script finished')

这就是我expected:

The Data
start of name == main 
Creating process
Process made
process started
Doing Process: The Data
process joined
script finished

Process finished with exit code 0

这是reality:

The Data
start of name == main 
Creating process
Process made
process started
The Data                         <- wrongly repeated line
start of name == main            <- wrongly repeated line
script finished                  <- wrongly executed early line
Doing Process: The Data
process joined
script finished

Process finished with exit code 0

我不确定这是否是由于if声明或p.join()或其他东西以及扩展为什么会发生这种情况。有人可以解释一下吗what造成了这个和why?

为了清楚起见,因为有些人无法复制我的问题,但我有;我正在使用 Windows Server 2012 R2 Datacenter,并且我正在使用 python 3.5.3。


The way 多重处理 https://docs.python.org/3/library/multiprocessing.htmlPython 中的工作原理是每个子进程imports父脚本。在 Python 中,当您导入脚本时,函数中未定义的所有内容都会被执行。据我了解,__name__在导入脚本时发生更改(在这里检查这个SO答案以获得更好的理解 https://stackoverflow.com/questions/419163/what-does-if-name-main-do),这与直接在命令行上运行脚本不同,这会导致__name__ == '__main__'。此导入导致__name__不等于'__main__',这就是为什么代码中if __name__ == '__main__':不会为您的子流程执行。

任何您不想在子流程调用期间执行的内容都应移至您的if __name__ == '__main__':代码部分,因为这只会针对父进程运行,即您最初运行的脚本。

希望这个对你有帮助。如果您环顾四周,Google 周围还有更多资源可以更好地解释这一点。我链接了多处理模块的官方 Python 资源,我建议您仔细阅读它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多处理代码重复运行 的相关文章

随机推荐

  • 项目点击监听器上的列表片段

    我正在尝试使用 OnItemClickListener 在 Android 的 ListFragment 上创建一个列表 但我不能 我单击了 n 个列表项 但没有任何反应 我是碎片新手 这是我的代码 谢谢你 public class MyF
  • 在Heroku 上运行delayed_job 工作线程?

    所以现在我有一个delayed job的实现 它可以在我的本地开发环境中完美运行 为了在我的机器上启动工作程序 我只需运行rake jobs work它工作得很好 为了让delayed job在heroku上工作 我一直在使用几乎相同的命令
  • 将 JSON 数据解析为 .NET 对象的最佳方法

    将 JSON 数据解析为 NET 对象的最佳方法是什么 我正在尝试帮助我的一位编码员朋友 他正在尝试使用 ASP net 将一些数据从 JSON 字符串转储到数据库中 是否有任何预构建的脚本可以实现这一点 预先感谢任何帮助 NET Fram
  • 如何修改我的用户 PROFILE 文件以将我创建的脚本文件夹附加到 PATH 变量的末尾? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何修改我的用户 PROFILE 文件以将我创建的脚本文件夹附加到 PATH 变量的末尾 我不太确定这意味着什么 谁能解释一下吗 在 un
  • 如何检查屏幕是否正在运行?

    如何在Python中检查屏幕是否具有给定的名称 例如 检查server1是否正在运行 谢谢 用于查找当前屏幕会话的内置命令是screen ls 要在 python 中获得相同的功能 from subprocess import check
  • HTML5 中的

    有几篇关于这个主题的文章 但我无法理解之间的相关区别
  • gridview 内的 CheckBox 选中状态

    我有一个简单的网格视图
  • 如何使用 RxJS 在 Angular 6 中发出一系列 http 请求

    我一直在网上寻找解决方案 但找不到任何适合我的用户案例的解决方案 我正在使用 MEAN 堆栈 Angular 6 并且我有一张注册表 我正在寻找一种方法来执行对 API 的多个 HTTP 调用 每个调用都依赖于前一个调用的返回结果 我需要看
  • 如何在 Angular4 中获取 FormControl 的值

    我对 Angular4 有一些经验 但我只是继承了一段使用 FormControls 的代码 我不知道如何使用它们 我正在设置一个注释文本区域 如果 isRegulatoryAuditRequired 的值等于 false 则需要该注释文本
  • jquery - 如何显示隐藏的div

    我的页面中嵌入了一个谷歌地图 其可见性设置为隐藏 我想使用按钮在页面上显示地图 应该使用jquery来完成 我的代码 不工作 div style height 350px border 1px solid 979797 div 任何人都可以
  • 在 C++ Microsoft Visual Studio 2010 中调试器多个环境变量

    在设置环境变量时 我在 Visual Studio 2010 Professional C 调试器中遇到了一个非常简单的问题 描述于 http msdn microsoft com en en library kcw4dzyf aspx h
  • 是否可以使用eclipse仅构建一次java项目并共享?

    是否有可能实际构建一个包含java代码的maven项目 构建一次并且二进制文件可以共享 问题 我尝试构建的项目大约需要 3 4 小时 并且需要高互联网带宽 我正在尝试检查在其他几台机器中重新使用这个构建项目的可能性 我之前曾处理过涉及 ma
  • 如何在 using 语句中使用对象初始值设定项?

    有没有什么方法可以重构此代码 以便不必使用临时变量 而仍然使用与对象初始值设定项关联的语法糖 FrmSomeForm someTempForm new FrmSomeForm SomePropA A SomePropB B SomeProp
  • Go 闭包变量作用域

    我正在阅读 CreateSpace Go 2012 编程简介 在第 86 页我发现了这个邪恶的魔法 func makeEvenGenerator func uint i uint 0 return func ret uint ret i i
  • TypeScript - 将动态属性名称传递给子级

    我正在开发一个带有嵌套路由的路由库 我试图定义一个推断父路径的子处理函数 原因是我有另一种类型 可以从字符串推断动态路径参数 例如 users id to id string 因此 我希望能够将推断的路径参数从父路由传递到每个子路由处理函数
  • 使用 Jasmine 在 Angular 5 中进行单元测试模型绑定

    我正在尝试编写一个单元测试来测试从组件方法调用返回的 JSON 数据是否成功绑定到打字稿模型 我的模型如下所示 export interface IPlayerAccount playerId number name string phon
  • 如何从 TFS 源代码管理中排除特定文件

    我们有多个配置文件 app DEV config app TEST config 等 和一个将正确的配置文件复制到 app config 的预构建事件 显然 配置特定文件位于源代码管理中 但目前 App Config 也是如此 但不应该如此
  • 从后台工作程序中的循环更新文本框

    我知道这个问题有人问过 至少从我到目前为止在这里发现的情况来看 但我无法真正理解它 已经尝试过 msdn 的示例 但仍然没有成功 这是我想要做的 我有一个连接到 TLL 标尺的 USB 计数器 我想在循环中不断读取值并将读数写入文本框而不阻
  • 如何从方法返回对对象的 const 引用? [复制]

    这个问题在这里已经有答案了 public Item getItem ulong itemId Item item items itemId return item 现在的问题是 被调用者getItem必须能够检索以下信息item持有 但不修
  • 多处理代码重复运行

    所以我希望使用 python 多处理模块创建一个进程 我希望它成为更大脚本的一部分 我还想从中得到很多其他东西 但现在我会满足于此 我从以下位置复制了最基本的代码多处理文档 https docs python org 3 6 library