【问题标题】:subprocess without hang parent process没有挂起父进程的子进程
【发布时间】:2014-05-11 14:55:16
【问题描述】:

我有 python 函数,我正在 Maya 中运行该进程。我想将该功能作为另一个进程运行,这样 Maya 仍会响应并且我可以继续使用 Maya。

from multiprocessing import Process
def test_func(node):
   # I have some crazy functions in here
   pass

def run_test():
   p = Process(target=test_func, args=(items,))
   p.daemon = True
   p.start()

这只是一个测试功能。我只想展示我正在尝试做的事情。知道在不干扰 Maya 的情况下启动进程的聪明方法是什么吗?

非常感谢

【问题讨论】:

  • 拨打run_test()会怎样?

标签: python-2.7 subprocess multiprocessing maya


【解决方案1】:

这对每个人来说可能并不明显,因为您很快就对一个关键问题感到茫然……但是您正在尝试在 Autodesk Maya 会话中使用multiprocessing。据我所知,那是行不通的。

出于高级别的原因,我相信其他人可以提供更多详细信息,multiprocessing.Process 想要分叉 Maya 进程并继续运行。这意味着它需要复制整个 Maya 图像(如果您在场景中做很多事情,这可能超过 1GB 的内存),然后继续运行。您通过 Maya API 执行的任何操作都将在一个完全不同的过程中,在不同的场景图中。此外,您很可能会死锁,因为来自主进程的所有各种同步原语状态现在都按原样复制到新空间。

您最好还是坚持使用 Maya 中的线程解决方案,或者使用外部进程。即使使用线程,您与 Maya API 交互的能力也有限,它们提供了用于执行对主线程的调用甚至等待其结果的实用程序。

同样,任何对进程分叉和死锁有更多低级知识的人,请随时扩展此答案。

【讨论】:

  • Maya 中的线程解决方案?,我不太清楚这一点:(
  • @Achayan - 是的,我只是想使用线程。线程池应该工作,子进程调用也应该工作(除了超级罕见的情况,它也会在分叉期间导致死锁)
【解决方案2】:

我没有做过任何python多线程,只有c++,但是除非Process隐式使用多线程,否则它不会同时运行。查找作为标准库一部分的线程模块的文档。

【讨论】:

  • multiprocessing.Process 在 Python 中创建一个单独的操作系统进程。它“同时”运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多