2013-02-10 33 views
7

मैं zmq आईपीसी सॉकेट के माध्यम से एक मौजूदा dict भेजने के लिए कोशिश कर रहा हूँ, मैं इस कोड के साथ एक स्ट्रिंग भेज सकते हैं, लेकिन मैं एक dict वस्तु
zmq आईपीसी के माध्यम से एक मौजूदा dict भेजा जा रहा है

import zmq, datetime 

d = {0: ('356612022462768', 'EVENT', 0, '2012-12-26 15:50:16', -20.22216, -70.13723, 6.44, 134.0, 1, 2, '18743230', datetime.datetime(2013, 2, 10, 9, 6, 2, 362734))} 

if __name__ == "__main__": 
    context = zmq.Context() 
    publisher = context.socket(zmq.PUB) 
    publisher.connect("ipc://shared") 
    while True: 
     publisher.send(d) 
     time.sleep(1) 

नहीं भेज सकते हैं
TypeError: {0: ('356612022462768', 'EVENT', 0, '2012-12-26 15:50:16', 
      -20.22216, -70.13723, 6.44, 134.0, 1, 2, '18743230', 
      datetime.datetime(2013, 2, 10, 9, 6, 2, 362734))} 
does not provide a buffer interface. 

मैं यह कैसे कर सकता हूं?

उत्तर

9

केवल ज़ीरोमक के माध्यम से स्ट्रिंग या बाइट एरे भेजना संभव है, आउट ऑफ़ द बॉक्स। तार पर स्थानांतरण के लिए ज़ीरोमैक को पास करने से पहले और कुछ भी क्रमबद्ध करने की आवश्यकता है।

आप इसे जो भी करना चाहते हैं उसका उपयोग कर सकते हैं, उदाहरण के लिए प्रोटोकॉल बफर, जेएसओएन या संदेश पैक। ध्यान दें कि किसी भी प्राप्तकर्ता को उसी प्रोटोकॉल का उपयोग कर डेटा को deserialize करने में सक्षम होना चाहिए।

आप pyzmq here के संयोजन के साथ विभिन्न धारावाहिक तकनीकों (एक numpy सरणी सहित) का उपयोग करने के उदाहरणों पर उदाहरण पा सकते हैं। वे pyzmq source का हिस्सा हैं।

6

आपको उपयोग केस के आधार पर शायद JSON को डेटा क्रमबद्ध करने की आवश्यकता होगी। आप इसे के रूप में यह है नहीं भेज सकते हैं, तो आप एक स्ट्रिंग प्रतिनिधित्व

import json 
myjson = json.dumps(d) 

लेकिन datetime वस्तु की आवश्यकता होगी बस json में परिवर्तित नहीं किया जा सकता है ताकि आपको अलग तरीके से से निपटने के लिए होगा, इस पोस्ट के साथ में मदद मिलेगी कि: JSON datetime between Python and JavaScript