शुरुआत के लिए, मैं कहना चाहूंगा कि अगर कोई यहां मदद कर सकता है, तो आप अविश्वसनीय हैं।
सामान्य प्रश्न
मेरे पायथन कार्यक्रम को MSMQ के साथ बातचीत करने की आवश्यकता है। मूल रूप से, मैं एक कतार में झांकना चाहता हूं, यदि कोई कतार में कुछ भी नहीं है तो टाइमआउट निर्दिष्ट करना।
हालांकि, मेरे सर्वोत्तम प्रयासों के बावजूद, मैं पीक () को टाइमआउट अंतराल की प्रतीक्षा नहीं कर सकता, जब कतार में पहले से कोई मूल्य नहीं है। क्या आप कृपया बता सकते हैं कि इस कोड से क्या गायब है?
मेरा वर्तमान कोड
यहाँ मेरा कोड अभी है:
from socket import gethostname
import win32com.client
import pythoncom
import clr
clr.AddReference("System")
clr.AddReference("System.Messaging")
from System import TimeSpan
from System.Messaging import MessageQueue
# Source: [1]
# [1] https://docs.microsoft.com/en-us/previous-versions/windows/desktop/msmq/ms707027%28v%3dvs.85%29
MQ_DENY_NONE = 0x0
MQ_PEEK_ACCESS = 0x1
MQ_SEND_ACCESS = 0x2
# Set up queue
pythoncom.CoInitialize()
qinfo = win32com.client.Dispatch("MSMQ.MSMQQueueInfo")
qinfo.FormatName = f"direct=os:{gethostname()}\\PRIVATE$\\MyQueue"
queue = qinfo.Open(MQ_PEEK_ACCESS, MQ_DENY_NONE)
# Receive a value
timeout_sec = 1.0
timespan = TimeSpan.FromSeconds(timeout_sec)
label, body = "", ""
# TODO: timeout value does not appear working. It never waits when
# there's no message
if queue.Peek(pythoncom.Empty, pythoncom.Empty, timespan):
msg = queue.Receive() . # Blocking receive --> remove msg from the queue
if msg is not None:
label = msg.Label
body = msg.Body
मैं दौड़ता हूं inspect.getfullargspec(queue.Peek)
और मिलता हूं :
FullArgSpec(args=['self', 'WantDestinationQueue', 'WantBody', 'ReceiveTimeout', 'WantConnectorType'], varargs=None, varkw=None, defaults=(<PyOleMissing object at 0x00000147F5D43BD0>, <PyOleMissing object at 0x00000147F5D43BD0>, <PyOleMissing object at 0x00000147F5D43BD0>, <PyOleMissing object at 0x00000147F5D43BD0>), kwonlyargs=[], kwonlydefaults=None, annotations={})
चीजें जो मैंने कोशिश की हैं
यह प्रश्न : कहने ReceiveTimeout=timespan
से मेरी समस्या हल नहीं होती है।
के pythoncom.Empty
साथ प्रतिस्थापित pythoncom.Missing
करने के लिए काम नहीं लगता है
यह अनुत्तरित प्रश्न मेरे लिए बहुत समान लगता है
queue.Peek
CoWaitForMultipleHandles(Flags, Timeout , Handles )
क्या यह आपकी मदद करता है?