سؤال

أنا أعمل على تطبيق Django بشكل صحيح وأستخدم Cherrypy كخادم.يقوم Cherrypy بإنشاء موضوع جديد لكل مشاهدة للصفحة.أود أن أكون قادرًا على الوصول إلى كل هذه المواضيع (المواضيع المسؤولة عن التحدث إلى Django) من داخل أي منها.وبشكل أكثر تحديدًا، أود أن أتمكن من الوصول إلى بيانات الموضوع لكل من هذه المواضيع من داخل أي منها.هل هذا ممكن؟ان كان هاكذا كيف افعلها؟

هل كانت مفيدة؟

المحلول

لا يقوم wsgiserver الخاص بـ CherryPy بإنشاء سلسلة محادثات جديدة لكل طلب - فهو يستخدم مجموعة.كل من هذه الخيوط العاملة هي فئة فرعية من threading.Thread، لذا يجب أن يكون الوصول إليها جميعًا عبر threading.enumerate().

ومع ذلك، إذا كنت تتحدث على وجه التحديد عن Cherrypy.thread_data، فهذا شيء آخر:Threading.local.إذا كنت تستخدم إصدارًا حديثًا من Python، فكل ما تم ترميزه بلغة C ولن يكون لديك (ربما على حق) إمكانية الوصول عبر سلسلة المحادثات إليه من Python.اذا أنت حقًا في حاجة إليها و حقًا إذا كنت تعرف ما تفعله، فإن أفضل أسلوب عادةً هو لصق مرجع إضافي لمثل هذه الأشياء في حاوية عامة في نفس الوقت الذي يتم فيه إدراجها في بنية thread_data.أوصي باستخدام الإملاءات ذات المراجع الضعيفة كمفاتيح لتلك الحاويات العامة - هناك ما يكفي من أنظمة Python ORM التي تستخدمها لتجمعات الاتصال (انظر Geniusql الخاص بي، على سبيل المثال) والتي يجب أن تكون قادرًا على تعلم كيفية تنفيذها بسهولة إلى حد ما.

نصائح أخرى

ردي الأول على سؤال مثل هذا ليس لإخبارك بكيفية القيام بذلك ولكن للتأكيد على أنه يجب عليك إعادة النظر حقًا قبل المضي قدمًا في هذا.عادةً ما أخجل من خوادم الويب المترابطة، لصالح الحلول متعددة العمليات أو غير المتزامنة.إن إضافة اتصال صريح بين الخيوط إلى المزيج يزيد من هذه المخاوف فقط.

عندما يُطرح سؤال كهذا، يكون هناك هدف أعمق.أظن أن ما تعتقد أن الاتصال بين الخيوط سيحله يمكن حله بالفعل بطريقة أخرى أكثر أمانًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top