マルチスレッド関数をハングさせるsleepステートメントに問題があります。プログラムの残りの部分が実行されている間、関数にビジネスを実行させたいです。これが私の問題を再現するおもちゃです:
import multiprocessing, sys, time
def f(icount, _sleepTime = 1):
for i in range(icount):
time.sleep(_sleepTime)
print(_sleepTime)
def main(args):
m = multiprocessing.Process(target = f, args=(4, ))
m.run()
# f should be sleeping for 1 second so this print statement should come first
print(m.is_alive())
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
このコードが出力する理由を誰かが説明できますか?
1
1
1
1
False
それ以外の:
True
1
1
1
1
#
編集
#
最終的には、この関数をスケジュールで実行し、関数を実行する前に実行されているかどうかをテストしたいと思います。これは例です:
import multiprocessing, sys, time
def f(icount, _sleepTime = 1):
for i in range(icount):
time.sleep(_sleepTime)
print(_sleepTime)
def main(args):
m = multiprocessing.Process(target = f, args=(4, ))
for i in range(15):
time.sleep(.5)
if not m.is_alive():
# m.start throws an error after first run
m.run()
print("{}".format(m.is_alive()))
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))