चलाता है जब यह अजीब चीज है!ओएस बहु-थ्रेडेड पायथन प्रक्रिया
मेरे पास पाइथन में लिखा गया एक बहु थ्रेडेड क्लाइंट एप्लिकेशन है। मैं समवर्ती रूप से पृष्ठों को डाउनलोड और संसाधित करने के लिए थ्रेडिंग का उपयोग कर रहा हूं। मैं कर्ल मल्टी-हैंडल का उपयोग करता हूं सिवाय इसके कि बाधा निश्चित रूप से प्रोसेसर (बैंडविड्थ नहीं) इस एप्लिकेशन में है, इसलिए यह थ्रेड पूल का उपयोग करने के लिए अधिक कुशल है।
मेरे पास 64 जी i7 रॉकिंग 16 जीबी रैम है। मांसल। मैं पेंडोरा को सुनकर और स्टैक ओवरफ्लो और बीएएम को टोल करते हुए 80 धागे लॉन्च करता हूं! माता-पिता की प्रक्रिया कभी कभी संदेश
Killed
अन्य बार एक ही पृष्ठ (जो यह क्रोम में स्वयं की प्रक्रिया है) मर जाएगा के साथ समाप्त होता है। अन्य बार पूरा ब्राउज़र दुर्घटनाग्रस्त हो जाता है। यहाँ
def start():
while True:
for url in to_download:
queue.put((url, uri_id))
to_download = [ ]
if queue.qsize() < BATCH_SIZE:
to_download = get_more_urls(BATCH_SIZE)
if threading.activeCount() < NUM_THREADS:
for thread in threads:
if not thread.isAlive():
print "Respawning..."
thread.join()
threads.remove(thread)
t = ClientThread(queue)
t.start()
threads.append(t)
time.sleep(0.5)
और ClientThread का सार है:
यहाँ माता पिता प्रक्रिया है:
class ClientThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def run(self):
while True:
try:
self.url, self.url_id = self.queue.get()
except:
raise SystemExit
html = StringIO.StringIO()
curl = pycurl.Curl()
curl.setopt(pycurl.URL, self.url)
curl.setopt(pycurl.NOSIGNAL, True)
curl.setopt(pycurl.WRITEFUNCTION, html.write)
curl.close()
try:
curl.perform()
except pycurl.error, error:
errno, errstr = error
print errstr
curl.close()
आप यहाँ कोड का एक सा देखना चाहते हैं तो यह का सार है
संपादित करें: ओह, ठीक है ... सवाल पूछना भूल गया ... स्पष्ट होना चाहिए: मेरी प्रक्रियाओं को क्यों मार दिया जाता है? क्या यह ओएस स्तर पर हो रहा है? कर्नेल स्तर? क्या यह खुले टीसीपी कनेक्शन की संख्या पर एक सीमा के कारण हो सकता है? क्या यह एक बार में चलने वाले धागे की संख्या पर एक सीमा है? cat /proc/sys/kernel/threads-max
का आउटपुट 257841
है। तो ... मुझे नहीं लगता कि यह है ....
मुझे लगता है कि मुझे यह मिल गया है ... ठीक है ... मेरे पास मेरे ड्राइव पर कोई स्वैप स्थान नहीं है। क्या अब कुछ स्वैप स्पेस बनाने का कोई तरीका है? मैं फेडोरा 16 चला रहा हूं। वहां स्वैप था ... फिर मैंने अपनी सारी रैम को सक्षम किया और यह जादुई रूप से गायब हो गया। पीछा /var/log/messages
मैं इस त्रुटि मिली:।
Mar 26 19:54:03 gazelle kernel: [700140.851877] [15961] 500 15961 12455 7292 1 0 0 postgres
Mar 26 19:54:03 gazelle kernel: [700140.851880] Out of memory: Kill process 15258 (chrome) score 5 or sacrifice child
Mar 26 19:54:03 gazelle kernel: [700140.851883] Killed process 15258 (chrome) total-vm:214744kB, anon-rss:70660kB, file-rss:18956kB
Mar 26 19:54:05 gazelle dbus: [system] Activating service name='org.fedoraproject.Setroubleshootd' (using servicehelper)
'dmesg (8)' आउटपुट देखने के लिए जांचें अगर कर्नेल ने कोई जानकारी लॉग कर दी है। – sarnold
धन्यवाद ... – KeatsKelleher
'dmesg (8) 'में अंतिम प्रविष्टियां मेरे राउटर के साथ संबद्ध मेरे वाईफाई एडाप्टर से संबंधित हैं। ... जो घंटों पहले – KeatsKelleher