torlek torlek
关注数: 25 粉丝数: 395 发帖数: 6,970 关注贴吧数: 56
写asyncio遇到问题了求助!asyncio准备条件终止task,但是没效果 先上代码 def runAsyncInAnotherThread(asyncCoros, stopConds): async def __localFunc(asyncCoros, stopConds): try: tasks = [] conds = [] for asyncCoro in asyncCoros: task = asyncio.create_task(asyncCoro) tasks.append(task) for stopCond in stopConds: task = asyncio.create_task(stopCond) conds.append(task) for task in tasks: await task except Exception: import traceback traceback.print_exc() finally: #### kill task print("Finally!!!!") all_tasks = asyncio.Task.all_tasks() for task in all_tasks: print(task.cancel()) def _localFunc(asyncCoros, stopConds): asyncio.run(__localFunc(asyncCoros, stopConds)) th = threading.Thread(target = _localFunc, args=(asyncCoros, stopConds,), daemon=True) th.start() th.join() async def requestQueueFilled(rq): #### when request queue is filled, task is killed while(rq.empty()): print('Checking Request Queue') await asyncio.sleep(5) print('Queue Filled!') raise AsyncioQueueFullException('Queue Filled! BG task terminating...') async def tmBGSubmitTemplates(nodeID): templateStatus = getGlobalStatus() q = Queue() try: while len(templateStatus['toSubmit']) > 0: try: q.clear() pid = list(templateStatus['toSubmit'].keys())[0] filename = templateStatus['toSubmit'][pid]['filename'] print('Doing background submission') tmSubmitLocalTemplate((None, q, pid, filename+'.png', filename+'.json', filename+'.template'), nodeID) v = q.get() if v < 0: asyncio.sleep(10) except asyncio.CancelledError as ce: raise ce except Exception: import traceback traceback.print_exc() except asyncio.CancelledError as ce: print("Background Submission Task Cancelled") raise ce async def exitSignal(sharedBoolValue, message = 'Exit Signal Emit!'): while not sharedBoolValue.value: print('Checking Exit Signal') await asyncio.sleep(5) print(message) raise AsyncioExitTemplateManagerException('Exiting ....') runAsyncInAnotherThread([tmBGSubmitTemplates(nodeID), requestQueueFilled(rq)], [exitSignal(sharedBool)]) 这是一个运行随时可以被打断的背景提交程序 这里运行两个await任务 1. 背景提交代码,不过因为并没有数据所以直接退出了 tmBGSubmitTmemplates 2. 检查请求队列,一旦有请求进入队列就退出 还运行一个非await任务exitSignal, 监视一个共享变量,用共享变量通知线程内进行任务终止 预期: 1. tmBGSubmitTemplates执行退出,直接await requestQueueFilled 2. sharedBool置True,外部程序终止,需要整个BG线程退出,这里让exitSignal扔异常, 3. 异常扔到__localFunc,因为没有catch,直接进finally,开始kill task 实际: 1. tmBGSubmitTemplates执行退出,直接await requestQueueFilled 2. sharedBool置True,exitSignal扔异常, 3. 外面没有收到exception 问题:如果要await才能收到exception,那么怎么才能做到条件退出?因为这里有两个条件,一个是队列,一个是全局信号
货币,金融危机,政权 讲个故事 住在某地有一家三口abc…… ……啊,不要介意,没有影射任何人的意思哈 来,继续 本来一家三口其乐融融的,有人享受有人出力 有一天脑抽了,要搞个家长制 a成为了家长 但是a这家伙平时在家里不干活,光吃喝睡玩,但是脑子比较好使,在外面能打工挣钱 bc嘛干活主力,在外面赚的比较少 这吃喝嘛都要买东西的不是?所以a被推为家长了 但是a成为家长以后,大家就开始怠工了 bc资格比较老,干的活也比较多,所以经常谴责a不干活,光吃 a也嫌弃bc脑子不灵活,做事不周到,不肯跟上时代发展学新东西 想来想去,决定在家庭内部发行m币,刺激一下大家的工作积极性 从此以后a就付m币给bc购买服务,bc之间互相购买m币的服务 久而久之……货币越来越多,服务费越来越高 b和c都意识到这m币有个毛用,能换啥呢,决定造反。 我可以不给你服务啊,自个烧饭洗衣服做菜打扫啊 a意识到了问题的严重性 这货币没循环啊,到bc哪儿就自循环了,所以一定得有个回流的机制 于是a想到了,我也经营个服务呗,那个啥 手机装软件,收费!解决手机问题,收费!帮忙上淘宝,收费! 授人以渔不如授人以鱼! 于是又继续下去了,不过好景不长,这些服务收费相比起平时的洗衣服做饭买菜频度太低啦,而且要跟家外的服务竞争,价格上不去,m币还是在大量积压! 于是a想到了加交易税的方法,加个50%的交易税,元芳你看咋样? bc不满暴政,揭竿而起! 讨价还价之中,交易税降低到了10%,并且规定了小于5m币的交易,咱不收税。 这能回血吗?太难了 于是a想到了一个办法, 家里的床位是有限的,所有的床位是a控制的,所有要睡床的人没有床的所有权,只有使用权,这个使用权,一次性1年交费,每年定价咱说了算,这不就解决了吗? b脑子很灵光,你说睡一年,但是你没有说我买了必须睡,于是b向c借了很多m币,买掉了所有的床位。然后把床位使用费调整到原来的2倍 a和c光火了,a本来指望靠这个回血,结果被拦腰一刀,c本来有床睡,结果现在不但没床,还要贴更多的钱给b …………请各位续篇~~~~~
能不能出一个瘟疫mod 1. 瘟疫事件随机起源在某一星球上 2. 可以选择 a. (发现瘟疫后)群体免疫(什么也不做),隔离措施(会导致生产消费品/娱乐业/文化/服务的人口失业,电力以及矿产资源的产出降低30%,),严酷的隔离措施(除了研究/行政/警察/战士岗位以外的所有人口失业),封闭性生产措施(所有人口不能更换岗位,幸福度降低40,人口增长率强制清为0) b.(发现瘟疫潜伏期特性后选择)自由流动,隔离观察(降低所有行业生产效率10%,迁移人口需要失业一个月),长期隔离观察(降低所有行业生产效率20%,迁移人口失业两个月),禁止跨星系人口流动(降低所有行业生产效率30%,并且不能迁移人口) c. (瘟疫扩散后选择,对未感染的星系)群体免疫(什么也不做),隔离措施(会导致生产消费品/娱乐业/文化/服务的人口失业,电力以及矿产资源的产出降低30%,),严酷的隔离措施(除了研究/行政/警察/战士岗位以外的所有人口失业),封闭性生产措施(所有人口不能更换岗位,幸福度降低40,人口增长率强制清为0) d. (疫苗研发、药物研发,疫情发生后一年)开发疫苗、开发药物(不管选哪个都需要2年,1000电,10000消费品,500气) e. (疫苗研发、药物研发中,且为伊瑞森先驱)我们发现了疫情的资料(+50%研究进度) f. (疫苗、药物研发成功)我们应该把它商业化、它应该无偿提供使用、我们应该屏蔽这个消息 4. 感染者特性导致每三个月触发死亡事件以3%的概率损失感染人口,在有医疗机构的星球上死亡率降低倍率r = r * (感染人口数 - 2*医疗工作者数) / 人口数,在拥挤的星球上调整倍率r = r * (需求住房)/总住房,死亡概率不低于0.3% 5. 每三个月触发传播事件,以10%的概率感染10*感染者个人口,在拥挤的星球上调整倍率r = r * (需求住房)/总住房,在有医疗服务者的星球上r = r * (人口数 - 2*医疗工作者数) / 人口数。隔离措施调整倍率r = r * 0.5。严酷的隔离措施调整倍率r = r * 0.25。封闭性生产措施调整倍率r = r * 0.5 6. 每三个月触发跨星球传播事件,每个星球以5%*感染者人口的概率,传播另一个星球,并导致一个人口带上感染者特性。隔离观察调整倍率r = r * 0.3,长期隔离观察调整倍率r=r * 0.09,禁止跨星系人口流动r = r * 0.01 7. 所有国家对玩家的评价根据感染者数量以及他们境内的感染者数量相应降低,每年+1 8. 疫苗、药物研发成功后如果选择屏蔽这个消息,每隔一年以10%的概率触发消息泄露事件。所有国家的外交倾向-200 9. 疫苗、药物研发成功后如果选择商业化,所有有感染者的国家都会用技术或者资源换疫苗。 a. 他们想用技术共享来交换我们的治疗方案(250人口以上->t4, 500人口以上->t5,125人口以上->t3) b. 他们想用资源来交换我们的治疗方案(250人口以上->2000暗物质, 500人口以上->4000暗物质,125人口以上->1000暗物质,可以选择等价的其他资源) 10. 疫苗、药物研发成功后如果选择无偿提供使用,所有感染国家的外交倾向+200
首页 1 2 下一页