আমি যে সমস্যার মুখোমুখি হয়েছি তা হ'ল মডিউলগুলির মধ্যে গ্লোবালগুলি আমদানির চেষ্টা করার ফলে প্রসেসপুল () লাইনটি একাধিকবার মূল্যায়ন করতে সক্ষম হয়েছিল।
globals.py
from processing import Manager, Lock
from pathos.multiprocessing import ProcessPool
from pathos.threading import ThreadPool
class SingletonMeta(type):
def __new__(cls, name, bases, dict):
dict['__deepcopy__'] = dict['__copy__'] = lambda self, *args: self
return super(SingletonMeta, cls).__new__(cls, name, bases, dict)
def __init__(cls, name, bases, dict):
super(SingletonMeta, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls,*args,**kw):
if cls.instance is None:
cls.instance = super(SingletonMeta, cls).__call__(*args, **kw)
return cls.instance
def __deepcopy__(self, item):
return item.__class__.instance
class Globals(object):
__metaclass__ = SingletonMeta
"""
This class is a workaround to the bug: AssertionError: daemonic processes are not allowed to have children
The root cause is that importing this file from different modules causes this file to be reevalutated each time,
thus ProcessPool() gets reexecuted inside that child thread, thus causing the daemonic processes bug
"""
def __init__(self):
print "%s::__init__()" % (self.__class__.__name__)
self.shared_manager = Manager()
self.shared_process_pool = ProcessPool()
self.shared_thread_pool = ThreadPool()
self.shared_lock = Lock()
তারপরে আপনার কোডের অন্য কোথাও থেকে নিরাপদে আমদানি করুন
from globals import Globals
Globals().shared_manager
Globals().shared_process_pool
Globals().shared_thread_pool
Globals().shared_lock
আমি pathos.multiprocessing
এখানে আরও প্রসারিত র্যাপার ক্লাস লিখেছি :
পার্শ্ব নোট হিসাবে, যদি আপনার ব্যবহারের ক্ষেত্রে পারফরম্যান্স অপটিমাইজেশন হিসাবে কেবল অ্যাসিঙ্ক মাল্টিপ্রসেস ম্যাপের প্রয়োজন হয়, তবে জবলিব আপনার সমস্ত প্রক্রিয়া পুলগুলি পর্দার আড়ালে পরিচালনা করবে এবং এটি খুব সাধারণ বাক্য গঠনটিকে অনুমতি দেবে:
squares = Parallel(-1)( delayed(lambda num: num**2)(x) for x in range(100) )
I want a pool to be able to call a function that has another pool inside
কীভাবে বুঝতে পারি না এবং কীভাবে এই কর্মীদের হস্তক্ষেপ করা যায় যে শ্রমিকরা অধিবেশন করা হয়েছে।