Newbie: how to wait for callbacks...
jeff.clough at gmail.com
jeff.clough at gmail.com
Fri Oct 13 22:19:36 EDT 2006
On Oct 13, 12:38 pm, Jan Bakuwel <jan.baku... at int.greenpeace.org>
wrote:
> Hoi all,
>
> I'm trying to write a little code that waits for a callback routine to
> be called, ideally with a timeout...
>
> I guess the code below is not right (using a boolean flag), but since
> I'm new to Python, I don't know yet where the semaphores live and/or
> whether I'm on the right track...
>
> Any help is much appreciated...
>
> Jan
>
> def processEmail(emailMessage):
>
> sendSent = False
>
> def sendComplete(result):
> print "Message sent successfully"
> processEmail.sendSent = True
> #end sendComplete
>
> def sendFailed(error):
> print >> sys.stderr, "Error", error.getErrorMessage()
> processEmail.sendSent = True
> #end sendFailed
>
> if emailMessage.is_multipart():
> print "...multipart"
> for pl in emailMessage.walk():
> pass
> else:
> print "...not multipart"
> # simulate some processing that will take place here
> time.sleep(1)
>
> multiMessage = MIMEMultipart()
> multiMessage['From'] = emailMessage['From']
> multiMessage['To'] = emailMessage['To']
> multiMessage['Subject'] = emailMessage['Subject']
> messageData = multiMessage.as_string(unixfrom=False)
> sending = smtp.sendmail('smtp', '... at t.t', '... at t.t', messageData)
> sending.addCallback(sendComplete).addErrback(sendFailed)
>
> while not processEmail.sendSent:
> print "z"
> time.sleep(0.1)
> #end while
>
> print "...done"
> #raise smtp.SMTPDeliveryError(code=550, resp="Unable to deliver
> email, please try again later", isFatal=True, retry=False)
> print ""
> #endif
>
> #end ProcessEmail
For semaphores, check out the mutex module
(http://docs.python.org/lib/module-mutex.html). For timeouts, look at
the alarm signal in the signal module
(http://docs.python.org/lib/module-signal.html).
--Jeff
More information about the Python-list
mailing list