为了总结我的问题,我制作了这个小程序,除了创建一系列打印东西并且应该自行销毁的线程之外什么都不做。
#!/usr/bin/env python
from time import sleep
from multiprocessing.pool import ThreadPool
def mythread(i):
print 'i %s \n' % i
sleep(1)
def start():
i = 1
while 1:
pool = ThreadPool(processes=1)
pool.apply_async(mythread, (i,))
sleep(5)
# ----------------------
# Main
# ----------------------
if __name__ == '__main__':
start()
但是当我以test.py的名义运行这个程序时,命令 ps aux -T 来获取进程列表显示我没想到的东西。
10:04 azerty@3RMQP32 ~/Bureau $ ps aux -T | grep test | grep -v grep
azerty 9613 9613 0.2 0.0 322616 7520 pts/19 Sl+ 10:04 0:00 python test.py
azerty 9613 9614 0.0 0.0 322616 7520 pts/19 Sl+ 10:04 0:00 python test.py
azerty 9613 9615 0.0 0.0 322616 7520 pts/19 Sl+ 10:04 0:00 python test.py
azerty 9613 9616 0.0 0.0 322616 7520 pts/19 Sl+ 10:04 0:00 python test.py
azerty 9613 9617 0.0 0.0 322616 7520 pts/19 Sl+ 10:04 0:00 python test.py
我预计第一秒的2个进程,主要和线程然后只有主要在睡眠。最后,一个线程每5秒会弹出1秒,然后立即自杀。但我没有观察到这一点。主进程生成4个子线程,永不死亡,5秒后, 创造了4个新的东西,直到我杀死所有东西。
如何确保至少子线程在到达其功能结束时自行完成。我无法加入(),因为我需要它来运行并持续启动线程。
谢谢,