当前位置:  开发笔记 > 编程语言 > 正文

python多处理中的字符串参数

如何解决《python多处理中的字符串参数》经验,为你挑选了3个好方法。

我正在尝试将字符串参数传递给进程中的目标函数.不知何故,字符串被解释为与字符一样多的参数列表.

这是代码:

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> Smashery..:

这是Python中常见的问题 - 如果你想要一个只有一个元素的元组,你需要指定它实际上是一个元组(而不仅仅是带有括号的东西) - 这是通过在元素之后添加一个逗号来完成的.

要解决这个问题,只需在字符串后面放一个逗号,在括号内:

p = multiprocessing.Process(target=write, args=('hello',))

这样,Python就会将其识别为具有单个元素的元组.目前,Python将您的代码解释为字符串.但是,它以这种特殊方式失败,因为字符串实际上是字符列表.所以Python认为你要传递('h','e','l','l','o').这就是为什么它说"你给了我5个参数".



2> Denis Otkida..:

更改args=('hello')args=('hello',),甚至更好args=['hello'].否则括号不会形成序列.



3> pygabriel..:

你必须通过

p = multiprocessing.Process(target=write, args=('hello',))

注意逗号!否则,它被解释为一个简单的字符串,而不是一个元素元组.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有