Yeni başlayanlar için, eğer birisi burada yardımcı olabilirse, inanılmazsın demek istiyorum.
Genel Soru
Python programımın MSMQ ile etkileşime girmesi gerekiyor. Temel olarak, kuyrukta hiçbir şey yoksa bir zaman aşımı belirterek bir kuyruğa bakmak istiyorum.
Ancak, en iyi çabalarıma rağmen, daha önce kuyrukta bir değer olmadığında Peek () 'i zaman aşımı aralığını bekletemiyorum. Lütfen bu kodda eksik olanları belirtebilir misiniz?
Mevcut Kodum
İşte benim kod şu anda:
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
Ben koşuyorum: inspect.getfullargspec(queue.Peek)
ve olsun:
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={})
Denediğim Şeyler
Bu soru : söylemek ReceiveTimeout=timespan
sorunumu çözmüyor gibi görünüyor.
Değiştirme pythoncom.Empty
ile pythoncom.Missing
işe görünmüyor
Bu cevaplanmamış soru benimkine çok benziyor
queue.Peek
CoWaitForMultipleHandles(Flags, Timeout , Handles )
size yardımcı olur mu?