多进程工作池的大多数示例在不同的进程中执行单个函数
def foo(args):
pass
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=30)
res=pool.map_async(foo,args)
Run Code Online (Sandbox Code Playgroud)
有没有办法在池中处理两个不同的独立功能?那么你可以为foo()分配fe 15进程,为bar()分配15个进程,或者是一个绑定到单个函数的池?或者你必须手动为不同的功能创建不同的过程
p = Process(target=foo, args=(whatever,))
q = Process(target=bar, args=(whatever,))
q.start()
p.start()
Run Code Online (Sandbox Code Playgroud)
忘了工人池?
我想知道有一个ORM与图数据库(fe Neo4j)的解决方案(或需要).我跟踪关系(A与B相关,它与A通过C等相关,从而构建一个大图)实体(包括那些实体的附加属性)并需要将它们存储在DB中,我认为图形数据库完全适合这项任务.
现在,对于类似sql的数据库,我使用sqlalchemyśORM来存储我的对象,特别是因为我可以从数据库中检索对象并以pythonic样式使用它们(使用它们的方法等).
Neo4j或其他Graph-DB是否有任何对象映射解决方案,以便我可以在Graph-DB中存储和检索python对象并轻松使用它们?
或者你会编写一些函数或适配器,如python sqlite文档(http://docs.python.org/library/sqlite3.html#letting-your-object-adapt-itself)来检索和存储对象?
不知怎的,我不能通过代理服务器下载文件,我不知道我做错了什么.我只是暂停了.有什么建议?
import urllib.request
urllib.request.ProxyHandler({"http" : "myproxy:123"})
urllib.request.urlretrieve("http://myfile", "file.file")
Run Code Online (Sandbox Code Playgroud) 我最近尝试加速一个小工具(使用urllib2向多处理模块发送请求到(非官方)twitter-button-count-url(> 2000 urls)并解析它的结果)(并且它工人池).我在这里阅读了几个关于多线程的讨论(与标准的非线程版本相比减慢了整个过程)和多处理,但我找不到一个(可能非常简单)问题的答案:
你可以通过多处理加速网址调用,还是像网络适配器这样的瓶颈?我不知道urllib2-open-method的哪一部分可以并行化,以及它应该如何工作......
编辑:这是我想要加速的请求和当前的多处理设置:
urls=["www.foo.bar", "www.bar.foo",...]
tw_url='http://urls.api.twitter.com/1/urls/count.json?url=%s'
def getTweets(self,urls):
for i in urls:
try:
self.tw_que=urllib2.urlopen(tw_url %(i))
self.jsons=json.loads(self.tw_que.read())
self.tweets.append({'url':i,'date':today,'tweets':self.jsons['count']})
except ValueError:
print ....
continue
return self.tweets
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
result = [pool.apply_async(getTweets(i,)) for i in urls]
[i.get() for i in result]
Run Code Online (Sandbox Code Playgroud) 通过SQLA-Expression-Language语句在MySQL-DB中插入多行时,fe
Foo.__table__.insert().execute([{'bar': 1}, {'bar': 2}, {'bar': 3}])
Run Code Online (Sandbox Code Playgroud)
与执行相同任务的"原始"sql语句相比,它极其缓慢,即
engine.execute("insert into foo (bar) values (1),(2),(3)")
Run Code Online (Sandbox Code Playgroud)
这是什么原因?SQLA不能生成单个批量插入语句,因此执行多个插入吗?由于orm的速度限制,我需要一种快速的方法一次添加几千行,但SQLA-Expression-Language-Version太慢了.那么,我需要自己编写原始sql吗?文档对此并不太清楚.
我使用ORM插件进行了速度测试,ORM具有预先分配的PK和SQLA批量插入(请参阅SQLA批量插入速度),如下所示(https://gist.github.com/3341940):
如您所见,三个版本之间几乎没有区别.只执行原始字符串插入,其中所有记录都包含在原始sql语句中明显更快.因此,对于快速插入,SQLA似乎是次优的.
在R中,您可以根据另一个向量的因子来分割向量:
> a <- 1:10
[1] 1 2 3 4 5 6 7 8 9 10
> b <- rep(1:2,5)
[1] 1 2 1 2 1 2 1 2 1 2
> split(a,b)
$`1`
[1] 1 3 5 7 9
$`2`
[1] 2 4 6 8 10
Run Code Online (Sandbox Code Playgroud)
因此,根据另一个列表的值(根据因子的顺序)将一个列表分组(以python表示)。
除了itertools.groupby方法之外,在python中有什么方便的方法吗?
我有以下元素(文本区域)。此文本区域的值不会出现在 html 代码中。但这将在页面加载时显示在网页中。如何使用 selenium 和 python 获取值。
<textarea id="query" class="textarea" cols="37" rows="30"></textarea>
我注意到当我在多处理环境中使用它时,sqlite3不是真的有能力也不可靠.每个进程都会尝试将一些数据写入同一个数据库,以便多个线程使用连接.我尝试使用check_same_thread = False选项,但插入次数非常随机:有时它包含所有内容,有时不包括.我应该并行过程只有功能(从网络读取数据)的部分,堆栈它们的输出到一个列表,并把它们放到桌子一起还是有处理与sqlite的多连接的可靠的方法?
python ×6
bulbs ×1
bulkinsert ×1
gil ×1
grouping ×1
html ×1
insert ×1
neo4j ×1
orm ×1
pool ×1
python-2.7 ×1
python-3.x ×1
r ×1
sqlalchemy ×1
sqlite ×1
urllib ×1
urllib2 ×1