配列項目をPythonで順番に印刷するには、3つのスレッドを使用する必要があります。スレッドをPythonと同期して実行するには?
各スレッドは1つの配列項目を出力します。
スレッドを数秒間スリープさせてからアイテムを印刷する必要があります。
この機能はN回実行されます。このN値はユーザによって与えられる。
項目は特定の順序で印刷する必要があります。つまり、前の項目が実行されていない間に実行する他のスレッドを何らかの形でブロックする必要があります。 私はさまざまなソリューションを試してきましたが、それを動作させる方法を理解できません。
セマフォ、ロック、イベントを使用しようとしましたが、同期に成功しませんでした。すべての場合、それはシーケンス自体ではなく、time.sleepに従ってランダムにシーケンスを出力します。どのようにスレッドが関数を実行するのをブロックし、シーケンスが動作するために前のスレッドが終了したかどうかを確認できますか?
どのツールを使用して動作させる必要がありますか?どんな助けもありがとうございます。
class myThread(threading.Thread):
def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, verbose=None):
super(myThread,self).__init__()
self.target = target
self.name = name
return
def run(self):
while True:
if not q.empty():
semaphore.acquire()
try:
time_sleep = random.randrange(0,10)
print "thread " + self.name + ". Dormir por " + str(time_sleep) + " segundos"
time.sleep(time_sleep)
print cores[int(self.name)]
if int(self.name) == len(cores) - 1:
item = q.get()
print 'Executou sequencia ' + str(item + 1) + ' vezes. Ainda irá executar ' + str(q.qsize()) + ' vezes'
e.set()
finally:
semaphore.release()
if int(self.name) != len(cores) - 1:
e.wait()
return
if __name__ == '__main__':
for i in range(2):
q.put(i)
for i in range(3):
t = myThread(name=i)
t.start()
この動作が必要な場合は、なぜ最初にスレッドを使用していますか?また、「私はたくさんの努力をしています」と言って、あなたの試行錯誤とあなたの期待に応えられなかったことを示してください。 – That1Guy