0

在这里,我有我的问题的相关代码片段:

from threading import Thread
.
.
.
def do_post(thread_no):
       print "Starting thread no: " + thread_no + "\n"

.
.
.

for i in range(0,MAX_THREADS):
        try:
            t=Thread(target=do_post, args=('%d'%i))
            t.start()

.
.

当 MAX_THREADS > 10 我收到错误消息:TypeError: do_post() takes exactly 1 argument (2 given)

如何让它接受 2 位数字?

4

2 回答 2

2

您可能想将 a 传递tupleargs

args=('%d'%i,)

正如您所拥有的那样,您只是传递了一个字符串,该字符串被解压缩成比应有的更多参数。

考虑:

def printstuff(*args):
    print args,len(args)

printstuff(*("1"))   #('1',) 1
printstuff(*("10"))  #('1', '0') 2
printstuff(*("10",)) #('10',) 1
于 2013-03-20T18:23:16.250 回答
1

args=(...,)需要传递一个序列,而不是一个标量值,所以在后面加一个逗号('%d'%i)

t = Thread(target=do_post, args=('%d'%i,))

('%d'%i)与字符串相同'%d'%i

('%d'%i, )'%d'%i作为其第一个元素的元组。


但是,顺便说一下,您不必传递线程号。

你可以使用:

 name = threading.current_thread().name

反而。


import threading

def worker():
    name = threading.current_thread().name
    print('I am: {n}'.format(n = name))

for i in range(4):
    t = threading.Thread(target=worker)
    t.daemon=True
    t.start()

# I am: Thread-1
# I am: Thread-2
# I am: Thread-3
# I am: Thread-4

如果您想更改线程的名称,您可以通过name参数传递您喜欢的任何字符串。例如,

t = threading.Thread(target=worker, name=str(i))

结果是

I am: 0
I am: 1
I am: 2
I am: 3
于 2013-03-20T18:26:04.373 回答