我一直在尝试使用python多处理软件包来加速我正在通过利用计算机的多个核心进行的一些物理模拟.
我注意到,当我运行我的模拟时,最多使用12个核心中的3个.事实上,当我开始模拟时,它最初使用3个核心,然后一段时间后它变为1核心.有时从一开始就只使用一个或两个核心.我无法弄清楚为什么(我基本上没有改变任何东西,除了关闭几个终端窗口(没有任何活动进程)).(操作系统是Red Hat Enterprise Linux 6.0,Python版本是2.6.5.)
我通过改变工作分割的块数(2到120之间)进行实验(即创建的进程数),但这似乎没有效果.
我在网上查找了有关此问题的信息,并阅读了本网站上的大多数相关问题(例如一个,两个),但找不到解决方案.
(编辑:我刚尝试在Windows 7下运行代码,并且它正在使用所有可用的内核.但我仍然希望为RHEL修复此问题.)
这是我的代码(物理遗漏):
from multiprocessing import Queue, Process, current_process
def f(q,start,end): #a dummy function to be passed as target to Process
q.put(mc_sim(start,end))
def mc_sim(start,end): #this is where the 'physics' is
p=current_process()
print "starting", p.name, p.pid
sum_=0
for i in xrange(start,end):
sum_+=i
print "exiting", p.name, p.pid
return sum_
def main():
NP=0 #number of processes
total_steps=10**8
chunk=total_steps/10
start=0
queue=Queue()
subprocesses=[]
while start<total_steps:
p=Process(target=f,args=(queue,start,start+chunk))
NP+=1
print 'delegated %s:%s to subprocess %s' …Run Code Online (Sandbox Code Playgroud) 根据文档(Python 3.8):
默认情况下,通过使用 来
object实现,在比较错误的情况下返回: 。__eq__()isNotImplementedTrue if x is y else NotImplemented
并且:
运算符号与方法名的对应关系如下: [...]
x==y调用x.__eq__(y)
所以我期望
==相当于__eq__()和__eq__返回。然而在下面,比较返回,而返回:NotImplemented====False__eq__()NotImplementedclass Dummy():
def __init__(self, a):
self.a = a
d1 = Dummy(3)
d2 = Dummy(3)
d1 == d2 # False
d1.__eq__(d2) # NotImplemented
Run Code Online (Sandbox Code Playgroud)
为什么?
这个关于wikidata的sparql查询显示德国(Q183)的所有地方,其名称以-ow或-itz结尾.
我想扩展它以寻找德国和奥地利的地方.
我尝试将第8行修改为:
wdt:P17 (wd:Q183 || wd:Q40);
Run Code Online (Sandbox Code Playgroud)
为了寻找奥地利的地方(Q40),但这不是一个有效的查询.
有什么方法可以将查询扩展到包含其他国家/地区?