<br><br>
<div class="gmail_quote">On Tue, Jul 8, 2008 at 2:07 PM, Wu Zhe &lt;<a href="mailto:jessewoo@gmail.com">jessewoo@gmail.com</a>&gt; 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>&nbsp; &nbsp;def import_query(self, path_list):<br>&nbsp; &nbsp; &nbsp; &nbsp;number_of_files = len(path_list)<br>&nbsp; &nbsp; &nbsp; &nbsp;line = &#39;3#%s&#39; % number_of_files<br>&nbsp; &nbsp; &nbsp; &nbsp;self.client_instance.sendLine(line)<br><br>&nbsp; &nbsp; &nbsp; &nbsp;sender = FileSender()<br>&nbsp; &nbsp; &nbsp; &nbsp;sender.CHUNK_SIZE = common.chunk_size<br>
&nbsp; &nbsp; &nbsp; &nbsp;for path in path_list:<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;f = open(path, &#39;rb&#39;)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s = f.read()<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filesize = len(s)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;crc = crc32(s)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;line = &#39;3#%s:%s&#39; % (filesize, crc)<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.client_instance.sendLine(line)<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;def transfer_completed(lastsent):<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;f.close()<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.client_instance.setLineMode()<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# send the file<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.setRawMode()<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;d = sender.beginFileTransfer(f, self.client_instance.transport)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;d.addCallback(transfer_completed)<br></blockquote>
<div>&nbsp;</div>
<div>&nbsp;</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>&nbsp;</div>
<div><font face="verdana,sans-serif">&nbsp;&nbsp; @defer.inlineCallbacks</font></div>
<div><font face="verdana,sans-serif">&nbsp;&nbsp;&nbsp;def import_query(self, path_list):</font></div>
<div><font face="verdana,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</font></div>
<div><font face="verdana,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for path in path_list:</font></div>
<div><font face="verdana,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt; delete transfer_complete() &gt;</font></div></div>
<div class="gmail_quote">
<div><font face="verdana,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</font></div>
<div><font face="verdana,sans-serif">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield sender.beginFileTransfer(f, self.client_instance.transport)</font></div>
<div><font face="verdana,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f.close()</font></div>
<div><font face="verdana,sans-serif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</font></div>
<div><font face="verdana,sans-serif"></font>&nbsp;</div>
<div><font face="verdana,sans-serif"></font>&nbsp;</div>
<div><font face="verdana,sans-serif">Harald</font></div>
<div><font face="verdana,sans-serif"></font>&nbsp;</div>
<div><br>&nbsp;</div></div>