擅长:python、mysql、java
<p>是的,您可以使用<code>ftplib</code>重用连接。你所要做的就是不要关闭它们,继续使用它们。在</p>
<p>例如,假设您有一个模块<code>filegenerator</code>,它的<code>generate()</code>方法注册到<code>inotify</code>,将通知排队,<code>yield</code>一个接一个:</p>
<pre><code>import ftplib
import os
import filegenerator
ftp = ftplib.FTP('ftp.example.com')
ftp.login()
ftp.cwd('/path/to/store/stuff')
os.chdir('/path/to/read/from/')
for filename in filegenerator.generate():
with open(filename, 'rb') as f:
ftp.storbinary('STOR {}'.format(filename), f)
ftp.close()
</code></pre>
<hr/>
<p>我有点困惑:</p>
<blockquote>
<p>The problem we are having now is the amount of connections that keeps open in TIME_WAIT state.</p>
</blockquote>
<p>听起来你的问题不是为每个文件创建一个新的连接,而是你从来没有关闭旧的连接。在这种情况下,解决办法很简单:只需关闭它们。在</p>
<hr/>
<p>要么是这样,要么你试着同时做这些事情,但没有意识到你在做什么。在</p>
<p>如果您希望<em>一些</em>并行,但不是无限的,您可以很容易地,例如创建一个由4个线程组成的池,每个线程都有一个打开的<code>ftplib</code>连接,每个线程从一个队列读取数据,然后是一个刚刚推到该队列上的<code>inotify</code>线程。在</p>