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

おそらく to を渡したいでしょ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 に答える