python多处理中的字符串参数
Posted
技术标签:
【中文标题】python多处理中的字符串参数【英文标题】:String arguments in python multiprocessing 【发布时间】:2010-12-06 06:12:25 【问题描述】:我正在尝试将字符串参数传递给进程中的目标函数。不知何故,字符串被解释为与字符数一样多的参数列表。
这是代码:
import multiprocessing
def write(s):
print s
write('hello')
p = multiprocessing.Process(target=write, args=('hello'))
p.start()
我得到这个输出:
hello
Process Process-1:
Traceback (most recent call last):
>>> File "/usr/local/lib/python2.5/site-packages/multiprocessing/process.py", line 237, in _bootstrap
self.run()
File "/usr/local/lib/python2.5/site-packages/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: write() takes exactly 1 argument (5 given)
>>>
我做错了什么?我应该如何传递一个字符串?
谢谢,爱丽儿
【问题讨论】:
【参考方案1】:这是 Python 中的一个常见问题——如果你想要一个只有一个元素的元组,你需要指定它实际上是一个元组(而不仅仅是用括号括起来的东西)——这是通过添加逗号来完成的在元素之后。
要解决这个问题,只需在字符串后的括号内加一个逗号:
p = multiprocessing.Process(target=write, args=('hello',))
这样,Python 将按照预期将其识别为具有单个元素的元组。目前,Python 将您的代码解释为只是一个字符串。但是,它以这种特殊方式失败了,因为字符串实际上是字符列表。所以Python认为你想通过('h','e','l','l','o')。这就是为什么它说“你给了我 5 个参数”。
【讨论】:
【参考方案2】:将args=('hello')
更改为args=('hello',)
甚至更好的args=['hello']
。否则括号不会形成序列。
【讨论】:
【参考方案3】:你必须通过
p = multiprocessing.Process(target=write, args=('hello',))
注意逗号!否则它会被解释为一个简单的字符串,而不是一个 1 元素元组。
【讨论】:
以上是关于python多处理中的字符串参数的主要内容,如果未能解决你的问题,请参考以下文章