【问题标题】:TypeError: expected string or Unicode object, NoneType found - Multiprocessing Pool not working in Zope/Plone external methodsTypeError: expected string or Unicode object, NoneType found - Multiprocessing Pool not working in Zope/Plone external methods
【发布时间】:2018-11-27 16:45:00
【问题描述】:

我正在使用

Zope - 2.13.19
Python - 2.6.8

以下代码在手动运行时有效,但在外部方法中无效。 它引发以下错误。我在做一些概念上的错误吗?

Exception in thread Thread-3:
Traceback (most recent call last):
  File "/opt/python2.6/lib/python2.6/threading.py", line 532, in __bootstrap_inner
    self.run()
  File "/opt/python2.6/lib/python2.6/threading.py", line 484, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/opt/python2.6/lib/python2.6/multiprocessing/pool.py", line 225, in _handle_tasks
    put(task)
TypeError: expected string or Unicode object, NoneType found


import time
from multiprocessing import Pool
import logging


def func(name):
    print 'hello %s,' % name
    time.sleep(5)
    print 'nice to meet you.'


def get_data():
    pool = Pool(processes=2)
    pool.map(func, ('frank', 'justin', 'osi', 'thomas'))

【问题讨论】:

  • External Method 是什么意思?
  • 在 Zope 中,您无法访问所有 Python 功能,因为它使用了一种称为 Restricted Python 的东西。因此,要充分利用 Python 的功能,您需要编写外部方法,用 RestrictedPython 编写的脚本可以访问这些方法。例如,由于安全限制,不可能从 RestrictedPython 脚本中的多处理写入。所以我们创建了一个外部方法来进行导入,然后从 RestrictedPython 脚本中调用它。
  • 也许您使用了另一种 Python 进行手动测试,而不是 ZOPE 使用的?假设外部意味着脚本位于[ZOPE_DIRECTORY]/parts 内部的某个位置,我会将其倒入自己的附加组件中,并通过导入表单的浏览器视图调用它。

标签: plone python-multiprocessing python-2.6 zope python-pool


【解决方案1】:

确保您跨进程边界发送的所有内容都可以是pickled

Multimedia Mike所述:

可以跨进程边界将对象发送给工作人员 只要对象可以被 Python 的 pickle 腌制就可以处理 设施。

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2015-03-21
    • 2021-09-12
    • 1970-01-01
    • 2016-10-27
    相关资源
    最近更新 更多