未知

CrowdProcess的Python项目详细描述


这是CrowdProcess的客户端 REST API

它在Python2.7和3.4+中工作。

安装

pip install crowdprocess

easy_install crowdprocess

用法示例

>>>fromcrowdprocessimportCrowdProcess>>>crp=CrowdProcess('username','password')>>>x2=crp.job('function Run (d) { return d*2; }')>>>results=x2(range(5)).results>>>list(results)[0,2,4,6,8,10]# comes in a random order

更详细的使用

导入和实例化

>>>fromcrowdprocessimportCrowdProcess>>>crp=CrowdProcess('username@email.com','password')

要拿到那些证书你必须 register使用crowdprocess。

您还可以用令牌而不是用户名来实例化它,然后 密码:

>>>crp=CrowdProcess(token='3c46d593-5435-47c5-92aa-1613ade978c2')

工作

创建作业

上面实例化了CrowdProcess类,

>>>program='function Run (d) { return d }'>>>job=crp.job(program)>>>job.id'3c46d593-5435-47c5-92aa-1613ade978c2'

使用program参数自动调用crp.job。 在crowdprocess中创建作业并返回实例Job

当你得到一个job.id后,你可以用它再次得到一个Job, 不创建:

>>>job=crp.job(id='3c46d593-5435-47c5-92aa-1613ade978c2')

列出作业
>>>crp.list_jobs()[{u'status':u'active',u'failed':0,u'bid':1,u'created':u'2014-05-14T10:07:52.747503Z',u'modified':u'2014-05-14T10:07:53.716147Z',u'browserHours':137,u'finished':1000,u'lastResult':u'2014-05-14T10:07:59.06Z',u'total':1000,u'id':u'3c46d593-5435-47c5-92aa-1613ade978c2'}]

更漂亮:

>>>jobs=crp.list_jobs()>>>print(json.dumps(jobs,sort_keys=True,indent=2))[{"bid":1,"browserHours":137,"created":"2014-05-14T10:07:52.747503Z","failed":0,"finished":1000,"id":"3c46d593-5435-47c5-92aa-1613ade978c2","lastResult":"2014-05-14T10:07:59.06Z","modified":"2014-05-14T10:07:53.716147Z","status":"active","total":1000}]

删除作业
>>>job=crp.job(id='3c46d593-5435-47c5-92aa-1613ade978c2')>>>job.delete()

删除所有作业
>>>crp.delete_jobs()

任务和结果

创建作业后,您就可以发送任务并返回 结果。

tasks可以是任何iterable对象,results将是生成器:

>>>job=crp.job('function Run (d) { return Math.pow(d, 2); }')>>>tasks=[0,1,2,3,4,5,6,7,8,9]>>>results=job(tasks).results>>>list(results)[49,64,16,25,9,36,4,81,0,1]

与,

>>>job=crp.job('function Run (d) { return Math.pow(d, 2); }')>>>list(job(range(10)).results)[49,64,16,25,9,36,4,81,0,1]

这也与,

>>>job=crp.job('function Run (d) { return Math.pow(d, 2); }')>>>deftasks():...foriinrange(10):...yieldi...>>>list(job(tasks).results)[25,64,49,16,36,9,0,81,1,4]

请注意,结果从来都不是按顺序排列的。

专业提示:您可以将一个作业的结果用作另一个作业的任务

>>>multiply=crp.job('function Run (d) { return d*2 }')>>>divide=crp.job('function Run (d) { return d/2 }')>>>numbers=range(10)>>>multiplied=multiply(numbers).results>>>divided=divide(multiplied).results>>>list(divided)[7,2,6,1,5,9,8,4,3,0]

不要忘记错误

有时你的任务会抛出你应该知道的意外的异常。 关于,您可以使用与获得结果相同的方式获得结果:

>>>job=crp.job('function Run (d) { if (d === 4) { throw new Error("oh no, "+d) } return d; }')>>>tasks=range(10)>>>errors=job(tasks).errors>>>forerrorinerrors:...printerror

任务和结果,较低级别

提交任务

同样,任务也可以是任何iterable:

>>>multiply=crp.job('function Run (d) { return d*2 }')>>>multiply.submit_tasks(range(10))

获得结果

>>>results=multiply.get_results()>>>list(results)[18,8,10,4,6,16,14,0,2,12]

这将提供当前作业的所有计算结果,但是 事实上,应该在计算出每个结果后立即在流中获取:

流结果

您还可以在每次结果出现时对其进行迭代:

>>>expected_results=10>>>results=multiply.get_results_stream()>>>forresultinresults:...print(result)...expected_results-=1...ifexpected_results==0:...break

流不知道是否或何时可以计算结果,并且 交付,所以您必须计算您仍希望打破多少结果 循环。

要正确使用此功能,您应该开始侦听流结果 在发送任务之前,可能有一个单独的线程:

>>>importthreading>>>job=crp.job("function Run(d) { return d; }")>>>defget_results():...expected_results=10...forresultinjob.get_results_stream():...print(result)...expected_results-=1...ifexpected_results==0:...break...>>>t=threading.Thread(target=get_results)>>>t.start()>>>job.submit_tasks(range(10))>>>7962381405>>>t.join()

有时你的任务会有意外的异常,而这些异常会导致 一个结果不能被交付,所以你必须解释这些以及 减少预期的结果计数器。

错误和流错误

有时您的任务会抛出意外异常,您应该得到它们:

>>>program="""
... function Run (d) {
...     if (d === 4) {
...             throw new Error("oops, it's "+d);
...     } else {
...             return d;
...     }
... }
... """>>>job=crp.job(program)>>>job.submit_tasks(range(10))>>>list(job.get_results())[1,6,9,8,5,7,2,3,0]# oh no, 4 is missing...>>>list(job.get_errors())[{u'message':u"oops, it's 4",u'type':u'program',u'name':u'Error',u'stack':u'Run@blob:9a4029f7-fff7-4da8-b552-92507e341749:5\n[2]</</self.onmessage@blob:9a4029f7-fff7-4da8-b552-92507e341749:9\n'}]>>>print(json.dumps(list(job.get_errors()),sort_keys=True,indent=2))# prettier[{"message":"oops, it's 4","name":"Error","stack":"Run@blob:9a4029f7-fff7-4da8-b552-92507e341749:5\n[2]</</self.onmessage@blob:9a4029f7-fff7-4da8-b552-92507e341749:9\n","type":"program"}]

与获取流结果的方式相同,您可以(也应该)获取 流错误:

>>>errors=multiply.get_errors_stream()>>>forerrorinerrors:...print(error)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android:位置服务权限   java Android Studio SQLite数据库创建不起作用?   java在Spring boot中添加会话bean导致没有为作用域“Session”注册作用域   正则表达式Java:从组中删除多次出现的不可打印字符   计算行和时出现java错误   java如何将存储在移动设备中的录制视频的Uri传递给另一个活动   java如何从加密字符串中获取原始字符串值?   java无法初始化jNativeHook 2.0   java一个应用程序中的两个并行通知(安卓)   java如何从Android上的Locale对象获取脚本?   不同类之间的java函数调用   java Spring MVC带EXT JS错误:DispatcherServlet noHandlerFound   java场景2D在表的顶部添加参与者   java Groovy ConcurrentHashMap forEach调用   java从数据库查询中重新格式化json   java单例类可以是泛型的吗?   java循环遍历正则表达式匹配项并替换当前匹配项   jdbc Java数据库元数据   爪哇为什么是一种特殊的番石榴秒表。调用比其他调用晚很多吗?(以邮递方式输出)   java使用递归传递带有基本情况的参数