我知道这个问题已经被问到了。但我无法回答这种魅力......
所以我有一个执行while循环的进程。但它不会循环。它转了一圈又......我不知道。这是我的循环:
import os
import time
import signal
import getdata
import twitter
import multiprocessing
collector = getdata.collectData(0) # Pour récupérer les données
botter = twitter.twitter() # Pour tweeter
def data_update_loop():
while True:
print 'Tour de boucle!'
start = time.time() # On calcule le temps d'éxecution
global collector, botter
collector.write_data()
botter.hourly_message()
done = time.time() # On stope le chrono
# On s'assure que le programme attende bien une demie-heure
time.sleep(1800 - (done - start))
def abort():
f = open('RUNNING.txt', 'r')
process = f.readline()
process = filter(None, process.split(","))
try:
for p in process:
os.kill(int(p), signal.SIGQUIT)
finally:
f.close()
os.remove('RUNNING.txt')
def main():
if not os.path.isfile('RUNNING.txt'):
f = open('RUNNING.txt', 'w+')
data_update = multiprocessing.Process(target=data_update_loop)
data_update.start()
# On écrit les PIDs pour pouvoir fermer les process après
f.write('{},{}'.format(data_update.pid, mentions_update.pid))
f.close()
choice = raw_input('Press X to abort all processes: ')
if choice.upper() == 'X':
abort()
else:
print 'Please restart the programm.'
os.remove('RUNNING.txt')
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
abort()
你能解释一下为什么吗?我知道这是关于CPU的事情...... 答案 0 :(得分:2)
我没有深入分析你的节目,但原因是主要过程并不等待孩子完成。
答案 1 :(得分:0)
感谢您的回答,我认为它有效,但不,它仍然无法正常工作...
#!/usr/bin/env python
# coding: utf-8
import os
import time
import signal
import getdata
import twitter
import multiprocessing
collector = getdata.collectData(0) # Pour récupérer les données
botter = twitter.twitter() # Pour tweeter
def data_update_loop():
while True:
start = time.time() # On calcule le temps d'éxecution
global collector, botter
collector.write_data()
botter.hourly_message()
done = time.time() # On stope le chrono
# On s'assure que le programme attende bien une demie-heure
time.sleep(1800 - (done - start))
def mentions_update_loop():
global botter
botter.mentions()
def abort():
f = open('RUNNING.txt', 'r')
process = f.readline()
process = filter(None, process.split(","))
try:
for p in process:
os.kill(int(p), signal.SIGQUIT)
finally:
f.close()
os.remove('RUNNING.txt')
def main():
if not os.path.isfile('RUNNING.txt'):
print 'Press ctrl + c to abort all processes.'
f = open('RUNNING.txt', 'w+')
data_update = multiprocessing.Process(target=data_update_loop)
mentions_update = multiprocessing.Process(target=mentions_update_loop)
data_update.start()
mentions_update.start()
# On écrit les PIDs pour pouvoir fermer les process après
f.write('{},{}'.format(data_update.pid, mentions_update.pid))
f.close()
else:
print 'Please restart the programm.'
os.remove('RUNNING.txt')
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
abort()
正如你所说,我更新了我的main()函数,并且在启动进程后它没有做任何事情...
感谢您的帮助!