私はセマフォをPythonで動作させようとしていますが、何らかの理由で彼らが望むように動作しません。 私は彼らのような一度に一つの番号を印刷したいと思います:セマフォの出力が間違っています
sem1: 1
wait
sem2: 2
wait
sem1: 3
wait
sem2: 4
が、出力は次のようである:
sem1: 1
sem2: 2
wait
sem1: 3
sem2: 4
が、これは私のコードです:
import os, multiprocessing, time
sem1 = multiprocessing.Semaphore(1)
sem2 = multiprocessing.Semaphore(0)
pid1 = os.fork()
pid2 = -1
if pid1 != 0:
pid2 = os.fork()
for i in range(1,20):
if (i%2) == 1 and pid1==0:
sem1.acquire()
print("sem1: %d" %i)
sem2.release()
time.sleep(1)
elif (i%2) == 0 and pid2==0:
sem2.acquire()
print("sem2: %d" %i)
sem1.release()
time.sleep(1)
私が作っています私の考えで間違い?
一緒に待たないでください。 'time.sleep'のように1つのプロセスだけをスリープさせるので、両方とも最初のステップを待ってから待ってから、2つ目のステップを待ってください。 –
なぜ' os.fork'を使用していますか?プロセスの作成に 'multiprocessing'モジュールの機能を使うべきではありませんか?ドキュメンテーションは、 'multiprocessing'モジュールが手動フォークとどのように相互作用するかについて何も言及していません。 – user2357112