我想检查一下UITabBarController
期间是否会保留线程。
这是线程在os.fork
之前启动的。
os.fork
该计划的输出:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import multiprocessing
from threading import Timer
import time
i = [0]
def work():
while True:
time.sleep(1)
i[0] += 1
print i[0]
print multiprocessing.current_process()
if __name__ == '__main__':
task = Timer(1, work)
task.daemon = True
task.start()
time.sleep(2)
print 'pre fork'
if os.fork():
# parent process
else:
# child process
multiprocessing.current_process().name = "Secondary"
time.sleep(2)
print 'post fork'
time.sleep(1000)
=============================================== ===========================
这是pre fork
1
<_MainProcess(MainProcess, started)>
2
<_MainProcess(MainProcess, started)>
post fork
post fork
3
<_MainProcess(MainProcess, started)>
4
<_MainProcess(MainProcess, started)>
5
<_MainProcess(MainProcess, started)>
6
<_MainProcess(MainProcess, started)>
7
<_MainProcess(MainProcess, started)>
之后线程的启动。
os.fork
输出如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import multiprocessing
from threading import Timer
import time
i = [0]
def work():
while True:
time.sleep(1)
i[0] += 1
print i[0]
print multiprocessing.current_process()
if __name__ == '__main__':
task = Timer(1, work)
task.daemon = True
time.sleep(2)
print 'pre fork'
if os.fork():
# parent process
task.start()
else:
# sub process
multiprocessing.current_process().name = "Secondary"
task.start()
time.sleep(2)
print 'post fork'
time.sleep(1000)
摘要
pre fork
post fork
post fork
1
1
<_MainProcess(Secondary, started)>
<_MainProcess(MainProcess, started)>
2
2
<_MainProcess(MainProcess, started)>
<_MainProcess(Secondary, started)>
之后启动线程时,每个东西都会正常,父进程和子进程都将运行该线程。os.fork
之前启动线程时,那么根据输出,似乎线程没有提出os.fork
,即它不会在子进程中执行。问题是这应该如何发生以及它是什么原因。
答案 0 :(得分:0)
突然,我想出了一个解释,答案是不,在os.fork
期间不会保留主题。
os.fork
只进行写时复制。 os.fork
之前启动一个线程,那么子进程没有start
逻辑。 os.fork
之后启动它。 :)
注意:这与gunicorn --preload argument类似。