我在这里提供了相关的代码片段:
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位数字?
答案 0 :(得分:2)
您可能希望将tuple
传递给args
:
args=('%d'%i,)
如你所知,你只是将一个被解压缩的字符串传递给更多的参数。
考虑:
def printstuff(*args):
print args,len(args)
printstuff(*("1")) #('1',) 1
printstuff(*("10")) #('1', '0') 2
printstuff(*("10",)) #('10',) 1
答案 1 :(得分: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