我需要从单个服务器中的单个文件夹下载许多文件,因此我正在寻找一种更快的方法。经过一番阅读后,似乎多线程或异步方法都可以工作,但我似乎无法让这两种方法都工作。
我正在使用的异步方法如下。这可行,即没有错误,但它一次只下载一个文件,因此不会提高速度。有没有办法修改它以便提高速度?
async def get_file(self):
async with aioftp.ClientSession(self.host, self.port, self.login, self.password) as client:
async for path, info in client.list(recursive=True):
if info["type"] == "file":
await client.download(path, destination=self.dest_dir,write_into=True, block_size=self.block_size)
def async_update(self):
loop = asyncio.get_event_loop()
loop.run_until_complete(self.get_file())
loop.close()
Run Code Online (Sandbox Code Playgroud)
然后我尝试在多处理中使用简单的 Pool() 函数,如下所示:
def simple_fetch(self,file)
file = open(self.dest_dir+filename, 'wb')
ftp.retrbinary('RETR ' + filename, file.write, 8192*(2^3)) #, 8192)
file.close()
def multi_fetch(self):
pool = Pool()
pool.map(self.simple_fetch,self.update_files)
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
但这会失败并出现错误。我一回到服务器就会更新该错误。
我从他们的网站本身尝试了一个简单的 python 多处理示例,但它没有提供任何输入。它显示为正在运行,我无法在 jupyter 笔记本中停止它。
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
p = Pool(5)
print(p.map(f, [1, 2, 3]))
Run Code Online (Sandbox Code Playgroud)
其他多处理示例也是如此。它不会给出任何错误或超时或任何东西。就像陷入无限循环或死锁一样。
我在 AzureDevOps 中创建新的代理池时遇到问题。
我想要做的是删除一台旧的自托管主机并部署一台新主机。然而,旧主机使用的代理池和新主机使用的代理池是由同事创建的。这导致我无法删除现有的注册代理,导致在新主机部署期间发生冲突。为了解决此问题,我能够删除代理池。
现在,当我想创建一个同名的新池时,我收到错误消息
“未找到标识符为 76 的代理池”。
有没有人看到过这个错误消息并且或者知道我可以采取什么措施?
预期: 创建一个与旧池同名的新代理池。
实际: 我收到错误消息“未找到标识符为 76 的代理池”。
我正在做一些设计(最初是为Java设计的)(但将来可能会扩展到.NET吗?),我对术语“缓存”和“池”感到困惑。
据我所知,主要区别在于它们包含什么?
什么时候应该使用哪个准则?
那么,在许多文章中提到的“缓存池”又是什么呢?
如果可以实现它,你能看看我的连接池吗?
public class ConnectionPool {
private static List<DBConnection> pool = null;
private static int available = 0;
private ConnectionPool() {}
public static DBConnection getConnection() {
if (pool == null) {
pool = new ArrayList<DBConnection>();
for (int i = 0; i < 3; i++) {
try {
pool.add(new DBConnection());
available++;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
if (pool.size() > 0) {
available--;
return pool.remove(available);
} else {
return null;
}
}
public static void returnConnection(DBConnection c) {
pool.add(c); …
Run Code Online (Sandbox Code Playgroud) 我在使用Python多处理包中的pool.map传递数据库连接对象或游标对象时遇到了一些困难.基本上,我想创建一个工作池,每个工作池都有自己的状态和数据库连接,这样它们就可以并行执行查询.
我尝试过这些方法,但是我在python中得到了一个picklingerror -
第二个链接正是我需要做的,这意味着我希望每个进程在启动时打开数据库连接,然后使用该连接来处理传入的数据/ args.
这是我的代码.
import multiprocessing as mp
def process_data((id,db)):
print 'in processdata'
cursor = db.cursor()
query = ....
#cursor.execute(query)
#....
.....
.....
return row
`if __name__ == '__main__':
db = getConnection()
cursor = db.cursor()
print 'Initialised db connection and cursor'
inputs = [1,2,3,4,5]
pool = mp.Pool(processes=2)
result_list = pool.map(process_data,zip(inputs,repeat(db)))
#print result_list
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
`
这会导致以下错误 -
`Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line …
Run Code Online (Sandbox Code Playgroud) 这是一个常识性问题,很快就会变成一个项目.我有一个脚本试图用已知的盐强制sha1强制sha1.无论如何,在本申请中,盐是已知的.无论如何,脚本工作正常,它是一个python脚本.当我运行它时,它最多可以获得16个核心.我想利用所有16个内核进行蛮力攻击!我用脚本搞砸了一下,并且能够在这里使用一个例子来利用多个核心,但它们并没有被使用.
http://forum.openopt.org/viewtopic.php?id=51
这个parrelization的东西对我来说是新的,我不知道如何在python中处理它(更不用说任何脚本语言).
TL; DR,python中使用所有可用于哈希的强大核心的最佳方法是什么,比如MD5?
基本上我现在拥有的是......(请注意释义代码)
from multiprocessing imports Pools
def prog()
generate hash_attempt
compare it to target
jobs = []
po = Pool()
for stuff in things:
po.apply_sync(prog())
Run Code Online (Sandbox Code Playgroud)
这可行,但我认为我说,它没有充分利用所有核心,然后有时它只是随机杀死.它将停止执行,我调用脚本的终端将返回到它的提示符,在它上面,它会说"已杀死".奇怪的东西.
万分感谢!
据我所知,gevent中池的想法是随时限制并发请求的总数,数据库或API等.
假设我有这样的代码,我产生的greenlets比我有更多的greenlets Pool
:
import gevent.pool
pool = gevent.pool.Pool(50)
jobs = []
for number in xrange(300):
jobs.append(pool.spawn(do_something, number))
total_result = [x.get() for x in jobs]
Run Code Online (Sandbox Code Playgroud)
尝试生成第51个请求时的实际行为是什么?第51个请求何时处理?
我希望这个池有一个能力(或多个选项),当这些池空闲超时时,它可以自动减少它的工作量.
我已经阅读了doc的文档,poolboy
并且worker_pool
发现只有最大工人数量选项,但没有选项可以何时减少它.
它是否存在或如何修改它们?
我正在尝试在Pool中异步加载numpy文件:
self.pool = Pool(2, maxtasksperchild = 1)
...
nextPackage = self.pool.apply_async(loadPackages, (...))
for fi in np.arange(len(files)):
packages = nextPackage.get(timeout=30)
# preload the next package asynchronously. It will be available
# by the time it is required.
nextPackage = self.pool.apply_async(loadPackages, (...))
Run Code Online (Sandbox Code Playgroud)
方法“ loadPackages”:
def loadPackages(... (2 strings & 2 ints) ...):
print("This isn't printed!')
packages = {
"TRUE": np.load(gzip.GzipFile(path1, "r")),
"FALSE": np.load(gzip.GzipFile(path2, "r"))
}
return packages
Run Code Online (Sandbox Code Playgroud)
在加载第一个“程序包”之前,就会发生以下错误:
线程Thread-8中的异常:回溯(最近一次调用为last):
_bootstrap_inner self.run()中的第914行“ C:\ Users \ roman \ Anaconda3 \ envs \ tsc1 \ …
pool ×10
python ×5
database ×2
agent ×1
asynchronous ×1
azure-devops ×1
caching ×1
connection ×1
erlang ×1
ftp ×1
gevent ×1
hash ×1
initializer ×1
java ×1
numpy ×1
object ×1
process ×1
python-3.x ×1
spawn ×1