<br><br>
<div class="gmail_quote">On Tue, Jul 8, 2008 at 2:07 PM, Wu Zhe <<a href="mailto:jessewoo@gmail.com">jessewoo@gmail.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hi<br><br>I have a series of files to transfer, each followed by a line sent to<br>specify the file size and crc number. As we can see here I need<br>
synchronous behavior, only after the previous file transfer complete,<br>can the for loop step into the next iteration to send the next file<br>via sender.beginFileTransfer. How can i achieve this? Here is the<br>problematic code:<br>
<br> def import_query(self, path_list):<br> number_of_files = len(path_list)<br> line = '3#%s' % number_of_files<br> self.client_instance.sendLine(line)<br><br> sender = FileSender()<br> sender.CHUNK_SIZE = common.chunk_size<br>
for path in path_list:<br> f = open(path, 'rb')<br> s = f.read()<br> filesize = len(s)<br> crc = crc32(s)<br> line = '3#%s:%s' % (filesize, crc)<br>
self.client_instance.sendLine(line)<br><br> def transfer_completed(lastsent):<br> f.close()<br> self.client_instance.setLineMode()<br><br> # send the file<br> self.setRawMode()<br>
d = sender.beginFileTransfer(f, self.client_instance.transport)<br> d.addCallback(transfer_completed)<br></blockquote>
<div> </div>
<div> </div>
<div><font face="verdana,sans-serif">I think I would try this (Python 2.5) -</font></div>
<div><font face="verdana,sans-serif"></font> </div>
<div><font face="verdana,sans-serif"> @defer.inlineCallbacks</font></div>
<div><font face="verdana,sans-serif"> def import_query(self, path_list):</font></div>
<div><font face="verdana,sans-serif"> ...</font></div>
<div><font face="verdana,sans-serif"> for path in path_list:</font></div>
<div><font face="verdana,sans-serif"> ...<br> < delete transfer_complete() ></font></div></div>
<div class="gmail_quote">
<div><font face="verdana,sans-serif"> ...</font></div>
<div><font face="verdana,sans-serif"> yield sender.beginFileTransfer(f, self.client_instance.transport)</font></div>
<div><font face="verdana,sans-serif"> f.close()</font></div>
<div><font face="verdana,sans-serif"> ...</font></div>
<div><font face="verdana,sans-serif"></font> </div>
<div><font face="verdana,sans-serif"></font> </div>
<div><font face="verdana,sans-serif">Harald</font></div>
<div><font face="verdana,sans-serif"></font> </div>
<div><br> </div></div>