กระบวนการย่อยเกิดขึ้นผ่านอ็อบเจ็กต์การแชร์แบบมัลติโพรเซสเซอร์ที่สร้างขึ้นก่อนหน้านี้ในโปรแกรมหรือไม่
ฉันมีการตั้งค่าต่อไปนี้:
do_some_processing(filename):
for line in file(filename):
if line.split(',')[0] in big_lookup_object:
# something here
if __name__ == '__main__':
big_lookup_object = marshal.load('file.bin')
pool = Pool(processes=4)
print pool.map(do_some_processing, glob.glob('*.data'))
ฉันกำลังโหลดวัตถุขนาดใหญ่ลงในหน่วยความจำจากนั้นสร้างกลุ่มคนงานที่ต้องใช้ประโยชน์จากวัตถุขนาดใหญ่นั้น วัตถุขนาดใหญ่สามารถเข้าถึงได้แบบอ่านอย่างเดียวฉันไม่จำเป็นต้องผ่านการปรับเปลี่ยนระหว่างกระบวนการ
คำถามของฉันคือ: วัตถุขนาดใหญ่ถูกโหลดลงในหน่วยความจำที่ใช้ร่วมกันหรือไม่เช่นเดียวกับที่ฉันสร้างกระบวนการใน unix / c หรือแต่ละกระบวนการโหลดสำเนาของวัตถุขนาดใหญ่ของตัวเองหรือไม่
อัปเดต: เพื่อชี้แจงเพิ่มเติม - big_lookup_object เป็นวัตถุการค้นหาที่ใช้ร่วมกัน ฉันไม่จำเป็นต้องแยกมันและประมวลผลแยกกัน ฉันต้องการเก็บสำเนาไว้หนึ่งชุด งานที่ฉันต้องแยกคือการอ่านไฟล์ขนาดใหญ่อื่น ๆ จำนวนมากและค้นหารายการในไฟล์ขนาดใหญ่เหล่านั้นเทียบกับวัตถุการค้นหา
อัปเดตเพิ่มเติม: ฐานข้อมูลเป็นทางออกที่ดี memcached อาจเป็นทางออกที่ดีกว่าและไฟล์บนดิสก์ (Shelve หรือ dbm) อาจดีกว่า ในคำถามนี้ฉันสนใจเป็นพิเศษเกี่ยวกับโซลูชันหน่วยความจำ สำหรับวิธีแก้ปัญหาขั้นสุดท้ายฉันจะใช้ hadoop แต่ฉันต้องการดูว่าฉันสามารถมีเวอร์ชันในหน่วยความจำในเครื่องได้หรือไม่
marshal.load
หา parent และสำหรับลูกแต่ละคน (แต่ละกระบวนการจะนำเข้าโมดูล)