เป้าหมายของฉันคือเพื่อให้เว็บเฟรมเวิร์กสามารถเข้าถึง Pyro daemon ซึ่งมีงานที่ใช้เวลานานในการโหลดครั้งแรก จนถึงตอนนี้ ฉันจัดการเพื่อเก็บอินสแตนซ์เดียวของคลาสที่ดูแลการโหลดที่ใช้เวลานานในการเริ่มต้นไว้ในหน่วยความจำ (นอกเว็บแอป) ฉันยังสามารถสอบถามด้วยเว็บแอปของฉันได้ รหัสสำหรับ daemon คือ:
Pyro4.expose
@Pyro4.behavior(instance_mode='single')
class Store(object):
def __init__(self):
self._store = ... # the expensive loading
def query_store(self, query):
return ... # Useful query tool to expose to the web framework.
# Not time consuming, provided self._store is
# loaded.
with Pyro4.Daemon() as daemon:
uri = daemon.register(Thing)
with Pyro4.locateNS() as ns:
ns.register('thing', uri)
daemon.requestLoop()
ปัญหาที่ฉันมีคือแม้ว่าจะมีการสร้างอินสแตนซ์เดียว แต่อินสแตนซ์นั้นจะถูกสร้างขึ้นเฉพาะในการสืบค้นพร็อกซีแรกจากเว็บแอปเท่านั้น นี่เป็นพฤติกรรมปกติตาม doc แต่ไม่ใช่สิ่งที่ฉันต้องการ เนื่องจากการสืบค้นแรกยังคงช้าเนื่องจากการเริ่มต้นของ Thing
ฉันจะแน่ใจได้อย่างไรว่าอินสแตนซ์นั้นถูกสร้างขึ้นทันทีที่ daemon เริ่มทำงาน
ฉันกำลังคิดที่จะสร้างอินสแตนซ์พร็อกซีของ Thing ในโค้ดของ daemon แต่นี่เป็นเรื่องยากเนื่องจากลูปเหตุการณ์จะต้องทำงานอยู่
แก้ไข
ปรากฎว่า daemon.register()
สามารถยอมรับคลาสหรืออ็อบเจ็กต์ได้ ซึ่งอาจเป็นวิธีแก้ปัญหา อย่างไรก็ตาม ไม่แนะนำสิ่งนี้ในเอกสาร (ลิงก์ด้านบน) และดูเหมือนว่าฟีเจอร์นั้นมีไว้เพื่อความเข้ากันได้แบบย้อนหลังเท่านั้น