जब एक अजगर डेमॉन प्रक्रिया के भीतर बहु मॉड्यूल का उपयोग कर रहा निम्न त्रुटि हो रही है (का उपयोग कर अजगर-डेमॉन):त्रुटि
Traceback (most recent call last): File "/usr/local/lib/python2.6/atexit.py", line 24, in _run_exitfuncs func(*targs, **kargs) File "/usr/local/lib/python2.6/multiprocessing/util.py", line 262, in _exit_function for p in active_children(): File "/usr/local/lib/python2.6/multiprocessing/process.py", line 43, in active_children _cleanup() File "/usr/local/lib/python2.6/multiprocessing/process.py", line 53, in _cleanup if p._popen.poll() is not None: File "/usr/local/lib/python2.6/multiprocessing/forking.py", line 106, in poll pid, sts = os.waitpid(self.pid, flag) OSError: [Errno 10] No child processes
डेमॉन प्रक्रिया (अभिभावक) कई प्रक्रियाओं (बच्चों) को जन्म देता है और फिर समय-समय पर प्रक्रियाओं को यह देखने के लिए मतदान करता है कि वे पूरा कर चुके हैं या नहीं। यदि माता-पिता का पता चलता है कि प्रक्रियाओं में से एक पूरा हो गया है, तो यह उस प्रक्रिया को पुनरारंभ करने का प्रयास करता है। यह इस बिंदु पर है कि उपरोक्त अपवाद उठाया गया है। ऐसा लगता है कि प्रक्रियाओं में से एक बार पूरा होने पर, मल्टीप्रोसेसिंग मॉड्यूल से जुड़े किसी भी ऑपरेशन से यह अपवाद उत्पन्न होगा। यदि मैं एक गैर-डेमॉन पायथन स्क्रिप्ट में समान कोड चलाता हूं, तो यह किसी भी त्रुटि के साथ निष्पादित करता है।
संपादित करें:
नमूना स्क्रिप्ट
from daemon import runner
class DaemonApp(object):
def __init__(self, pidfile_path, run):
self.pidfile_path = pidfile_path
self.run = run
self.stdin_path = '/dev/null'
self.stdout_path = '/dev/tty'
self.stderr_path = '/dev/tty'
def run():
import multiprocessing as processing
import time
import os
import sys
import signal
def func():
print 'pid: ', os.getpid()
for i in range(5):
print i
time.sleep(1)
process = processing.Process(target=func)
process.start()
while True:
print 'checking process'
if not process.is_alive():
print 'process dead'
process = processing.Process(target=func)
process.start()
time.sleep(1)
# uncomment to run as daemon
app = DaemonApp('/root/bugtest.pid', run)
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
#uncomment to run as regular script
#run()
पायथन 2.7 ट्रंक के साथ स्क्रिप्ट चलाना एक ही परिणाम उत्पन्न करता है। मैंने मूल पोस्ट में उपयोग की जा रही टेस्ट स्क्रिप्ट जोड़ दी है। क्या मैं कुछ गलत कर रहा हूँ? –
मुझे यकीन नहीं है, मुझे एक परीक्षण लोड करना होगा जो इसे जांचने के लिए पायथन-डिमन का उपयोग करता है। इस समय मुझ पर कुछ भी नहीं निकलता है। – jnoller