0

我正在使用并行 Python 来运行下面的代码。任何人都可以更正代码吗?这应该为输入列表中超过 20 的值打印“SORRY”。这仍然适用于超过 20 的值。

#http://www.parallelpython.com/

import sys,time,pp
import numpy 

n=int(raw_input("Enter the value of n: "))
#Enter any integer value

#Define is_low function as a filter 
def is_low(n):
    if n < 20:
       return True
    if n > 20:
       return False

def task(n):
    return (numpy.arange(n))


def expansion(n):
    if is_low(n)==True:
       return (task(n))
    if is_low(n)==False:
        print "SORRY"

ppservers=()
if len(sys.argv) > 1:
    ncpus = int(sys.argv[1])
    job_server = pp.Server(ncpus, ppservers=ppservers)
else:
    job_server = pp.Server(ppservers=ppservers)


print job_server.get_ncpus()
job1=job_server.submit(task,(n,),(is_low,expansion,),("numpy","sys",))
result=job1()
print result

ppservers = ()

if len(sys.argv) > 1:
    ncpus = int(sys.argv[1])
    job_server = pp.Server(ncpus, ppservers=ppservers)
else:
    job_server = pp.Server(ppservers=ppservers)

print "Starting pp with", job_server.get_ncpus(), "workers"

start_time = time.time()
inputs = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,21,22,23,24,25,26)
jobs = [(input, job_server.submit(task,(input,),(expansion,is_low,),  ("numpy","sys","time",))) for input in inputs]
for input, job in jobs:
    print "Expansion for the below",input,"is",job()

print "Time elapsed: ", time.time() - start_time, "s"
job_server.print_stats()
4

1 回答 1

0

is_low你应该检查,n <= 20而不是n < 20. 如果您指定n为 20,则不会返回任何内容。我认为is_low应该是这样的:

def is_low(n): 
    if n <= 20: 
        return True 
    if n > 20: 
        return False

我相信你的代码真的不起作用的原因是因为你已经颠倒了函数expansiontask正在做的事情。如果将这两个函数更改为:

def expansion(n):
    return (numpy.arange(n))

def task(n):
    if is_low(n)==True:
        return (expansion(n))
    if is_low(n)==False:
        return "SORRY"

这与你所拥有的不同。task应该调用扩展而不是相反。我也返回"SORRY"而不是print它。而不是返回"SORRY"你应该返回一个值-1来表示错误。作业完成后,您可以检查-1并显示一条消息。

下面的代码并不完全是您所要求的,但我认为这足以让您继续前进:

#http://www.parallelpython.com/

import sys,time,pp
import numpy

n=int(raw_input("Enter the value of n: "))
#Enter any integer value

#Define is_low function as a filter
def is_low(n):
    if n <= 20:
       return True
    if n > 20:
       return False

def expansion(n):
    return (numpy.arange(n))


def task(n):
    if is_low(n)==True:
       return (expansion(n))
    if is_low(n)==False:
       return "SORRY"

ppservers=()
if len(sys.argv) > 1:
    ncpus = int(sys.argv[1])
    job_server = pp.Server(ncpus, ppservers=ppservers)
else:
    job_server = pp.Server(ppservers=ppservers)


print job_server.get_ncpus()
job1=job_server.submit(task,(n,),(is_low,expansion,),("numpy","sys",))
result=job1()
print result

ppservers = ()

if len(sys.argv) > 1:
    ncpus = int(sys.argv[1])
    job_server = pp.Server(ncpus, ppservers=ppservers)
else:
    job_server = pp.Server(ppservers=ppservers)

print "Starting pp with", job_server.get_ncpus(), "workers"

start_time = time.time()
inputs = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,21,22,23,24,25,26)
jobs = [(input, job_server.submit(task,(input,),(expansion,is_low,),  ("numpy","sys","time",))) for input in inputs]
for input, job in jobs:
    print "Expansion for the below",input,"is",job()

print "Time elapsed: ", time.time() - start_time, "s"
job_server.print_stats()
于 2014-09-16T18:31:33.890 回答