तो, मैं एक एप्लिकेशन लिखने की कोशिश कर रहा हूं जो डीजेंगो को अपने ओआरएम के रूप में उपयोग करता है, क्योंकि इसे दोनों दृश्यों के प्रसंस्करण और फ्रंट-एंड का उपयोग करने में आसान कुछ करने की आवश्यकता होगी। यह मुख्य कार्यक्षमता डाटाबेस में एक उच्च-सीपीयू प्रक्रिया (मूल रूप से मोंटे कार्लो सिमुलेशन) में डेटा प्रोसेसिंग करेगा और मैं मल्टीप्रोसेसिंग को कार्यान्वित करना चाहता हूं, विशेष रूप से पूल (मुझे 4 प्रक्रियाएं मिलती हैं) का उपयोग करना। असल में मेरे कोड इस तरह से चलाता है, माता-पिता के बारे में 20 बच्चों के साथ:पाइथन मल्टीप्रोसेसिंग डेटाबेस समेकन को कैसे संभालें, विशेष रूप से django के साथ?
assorted import statements to get the django environment in the script
from multiprocessing import Pool
from random import random
from time import sleep
def test(child):
x=[]
print child.id
for i in range(100):
print child.id, i
x.append(child.parent.id) #just to hit the DB
return x
if __name__ == '__main__':
parent = Parent.objects.get(id=1)
pool = Pool()
results = []
results = pool.map(test,parent.children.all())
pool.close()
pool.join()
print results
जैसे कोड के साथ, मैं रुक-रुक कर DatabaseError
या PicklingError
रों मिलता है। पूर्व आमतौर पर "विकृत डेटाबेस" या "MySQL सर्वर से खोए गए कनेक्शन" के रूप में होते हैं, बाद वाले आमतौर पर "मॉडल को नहीं चुन सकते हैं। DoesNotExist"। वे यादृच्छिक हैं, किसी भी प्रक्रिया के साथ होते हैं, और निश्चित रूप से डीबी के साथ कुछ भी गलत नहीं है। अगर मैं pool = Pool(proccesses=1)
सेट करता हूं तो यह एक थ्रेड में ठीक है, ठीक है। मैं यह सुनिश्चित करने के लिए विभिन्न प्रिंट स्टेटमेंट्स में भी फेंक देता हूं कि उनमें से अधिकतर वास्तव में चल रहे हैं।
मैं भी करने के लिए test
बदलते किया गया है:
def test(child):
x=[]
s= random()
sleep(random())
for i in range(100):
x.append(child.parent.id)
return x
कौन सा बस प्रत्येक यात्रा को चलाने से पहले एक दूसरे से कम थामने है, और यह सब कुछ ठीक कर देता है। अगर मुझे यादृच्छिक अंतराल लगभग 500ms तक मिलता है तो यह अभिनय करना शुरू कर देता है। तो, शायद एक सहमति समस्या, है ना? लेकिन केवल 4 प्रक्रियाओं को मारने के साथ। मेरा सवाल यह है कि मैं समय से पहले डेटा के बड़े डंप किए बिना इसे कैसे हल करूं? मैंने इसे SQLite और MySQL दोनों के साथ परीक्षण किया है, और दोनों को इसके साथ परेशानी हो रही है।
के बाद से प्रक्रियाओं सीपीयू बाध्य कर रहे हैं, तो क्यों डेटाबेस में सभी दौड़ स्थितियों से बचने के लिए आप 'multiprocessing.Lock' का उपयोग नहीं करते हैं? – Bakuriu