任务调度

Gearman Python接口使用

☆樱花仙子☆ 提交于 2019-12-02 03:51:59
Gearman是一个分布式任务调度框架,对于Gearman的介绍已有很多,本文主要记录下最近是用Gearman的python接口时遇到的小问题 python-Gearman目前版本2.0.1( http://www.gearman.org/python_client_library ),从1.x到2.x的变化不少,相关的区别文档中有详细说明( http://pythonhosted.org/gearman/ ),下文对其中部分做下翻译性的介绍。 Gearman worker:worker端,向server注册工作接口并执行具体任务。 GearmanWorker类描述了woker的工作。 例:(来自文档) gm_worker = gearman.GearmanWorker(['localhost:4730']) #反转字符串 def task_listener_reverse(gearman_worker, gearman_job): return reversed(gearman_job.data) #设置id是可选的 gm_worker.set_client_id('your_worker_client_id_name') gm_worker.register_task('reverse', task_listener_reverse) #进入工作循环 gm_worker

宜信微服务任务调度平台建设实践|分享实录

旧巷老猫 提交于 2019-12-01 22:44:49
本文主要围绕SIA平台展开,包括研发背景设计思路和技术架构,以及如何支持业务方。 内容来源:宜信技术学院第4期技术沙龙-线上直播|宜信微服务任务调度平台建设实践 主讲人:宜信高级架构师&开发平台负责人 梁鑫 导读:如今,无论是互联网应用还是企业级应用,都充斥着大量的批处理任务,常常需要一些任务调度系统帮助我们解决问题。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构。 在此背景下,很多之前的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台。这些平台各有其特点,但也各有不足之处,比如不支持任务编排、与业务高耦合、不支持跨平台等问题,不是非常符合公司的需求,因此我们开发了微服务任务调度平台(SIA-TASK)。本次分享主要围绕SIA平台展开,包括研发背景设计思路和技术架构,以及如何支持业务方。 一、SIA-TASK的产生 1.1 背景 无论是互联网应用还是企业级应用,都充斥着大量的批处理任务,常常需要一些任务调度系统帮助我们解决问题。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构。 在这样的背景下,很多之前的任务调度平台或组件已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台。这些平台各有其特点,但也各有不足之处,比如不支持任务编排、与业务高耦合、不支持跨平台等问题。 1.2 种类 按照任务与时间的关系

线程阶段性总结——APM,ThreadPool,Task,TaskScheduler ,CancellationTokenSource

天大地大妈咪最大 提交于 2019-12-01 18:29:12
转载: https://www.cnblogs.com/xiashengwang/archive/2012/08/18/2645588.html 不管我们使用thread,threadPool,task,还是APM异步,本质都是在使用多线程。对于新手来说,不太敢用多线程的原因,就我个人的体验来说,就是对多线程的异常捕获方式或时机缺乏了解,而一旦出现异常没有捕获,将会带来难以发现的bug,进而造成系统崩溃。而多线程本身也不是一朝一夕就能学好的,必须不断的去学习总结,所以我个人认为你要用一种线程模型,首先要对它有足够的了解,特别是对异常的捕获。如果你没有完全的把握,最好在实际开发中谨慎的用多线程。 1,APM异步编程模型。 采用BeginXXX和EndXXX方法。关于异常的捕捉,对于刚调用BeginXXX抛出的异常,异步操作可能还没有进入队列。这种异常一般可以忽略。对于进入异步操作时发生的异常,会将错误码放入IAsyncResult对象中,在我们调用EndXXX方法时,会将这个错误码转换成一个恰当的Exception再次抛出。所以对于APM编程模型来说,我们只用对EndXXX方法进行异常捕捉。伪代码: Try { Result = someObj.EndXXX(IAsyncResult); } Catch(xxxException e) { //异常处理 } 注意事项: 1)

WPF多线程UI更新——两种方法

徘徊边缘 提交于 2019-12-01 18:27:30
转载: https://www.cnblogs.com/Jarvin/p/3756061.html WPF多线程UI更新——两种方法 前言   在WPF中,在使用多线程在后台进行计算限制的异步操作的时候,如果在后台线程中对UI进行了修改,则会出现一个错误:(调用线程无法访问此对象,因为另一个线程拥有该对象。)这是很常见的一个错误,一不小心就会有这个现象。在WPF中,如果不是用多线程的话,例如单线程应用程序,就是说代码一路过去都在GUI线程运行,可以随意更新任何东西,包括UI对象。但是使用多线程来更新UI就可能会出现以上所说问题,怎么解决?本文章提供两个方法:Dispatcher(大部分人使用),TaskScheduler(任务调度器)。 问题再现   可能有的WPF新手不懂这是什么情况,先来个问题的再现,再使用本文章的两个方法进行解决。   为了演示方便,我使用了最简单的布局,一个开始按钮,三个TextBlock。按一下开始按钮,开一个后台线程随机得到一个数字,并且更新第一个TextBlock。再开另外一个后台线程得到另外一个数字,更新第二个TextBlock。第三个TextBlock处理同理。   XAML代码: <Window x:Class="UpdateUIDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx

【TencentOS tiny】深度源码分析(5)——信号量

余生长醉 提交于 2019-12-01 13:45:30
信号量 信号量( sem )在操作系统中是一种实现系统中任务与任务、任务与中断间同步或者临界资源互斥保护的机制。在多任务系统中,各任务之间常需要同步或互斥,信号量就可以为用户提供这方面的支持。 抽象来说,信号量是一个非负整数,每当信号量被获取( pend )时,该整数会减一,当该整数的值为 0 时,表示信号量处于无效状态,将无法被再次获取,所有试图获取它的任务将进入阻塞态。通常一个信号量是有计数值的,它的计数值可以用于系统资源计数(统计)。 一般来说信号量的值有两种: 0:表示没有积累下来的 post 信号量操作,且可能有任务阻塞在此信号量上。 正值:表示有一个或多个 post 信号量操作。 一般来说信号量多用于同步而非互斥,因为操作系统中会提供另一种互斥机制(互斥锁),互斥量的互斥作用更完善:互斥锁有优先级继承机制,而信号量则没有这个机制,此外互斥量还拥有所有者属性,我们会在后续讲解。 信号量也如队列一样,拥有 阻塞机制 。任务需要等待某个中断发生后,再去执行对应的处理,那么任务可以处于阻塞态等待信号量,直到中断发生后释放信号量后,该任务才被唤醒去执行对应的处理。在释放( post )信号量的时候能立即将等待的任务转变为就绪态,如果任务的优先级在就绪任务中是最高的,任务就能立即被运行,这就是操作系统中的“ 实时响应,实时处理 ”。在操作系统中使用信号量可以提高处理的效率。

从0开始学FreeRTOS-1

好久不见. 提交于 2019-12-01 10:19:26
我们知道,(单核)单片机某一时刻只能干一件事,会造成单片机资源的浪费,而且还有可能响应不够及时,所以,在比较庞大的程序或者是要求实时性比较高的情况下,我们可以移植操作系统。因为这种情况下操作系统比裸机方便很多,效率也高。下面,杰杰将带你们走进FreeRTOS的世界随便看看。 下面正式开始本文内容。 在没有用到操作系统之前,单片机的运行是顺序执行,就是说,很多时候,单片机在执行这件事的时候,无法切换到另一件事。这就造成了资源的浪费,以及错过了突发的信号。那么,用上了操作系统的时候,很容易避免了这样的问题。 很简单,从感觉上,单片机像是同时在干多件事,为什么说像呢,因为单片机的执行速度很快,快到我们根本没办法感觉出来,但是同时做两件事是不可能的,在(单核)单片机中,因为它的硬件结构决定了CPU只能在一个时间段做一件事如: ![not os](https://img2018.cnblogs.com/blog/1834930/201910/1834930-20191015203731368-1727999152.jpg) 如这张图,都是按照顺序来执行这些事的,假设每个任务(事件)的time无限小,小到我们根本没法分辨出来,那么我们也会感觉单片机在同时做这六件事。 真相就是:所有任务都好像在执行,但实际上在任何一个时刻都只有一个任务在执行 如是加上了中断系统的话,就可以将上图理解为下图: !

python任务调度模块celery

别来无恙 提交于 2019-12-01 05:11:00
python任务调度模块celery celery简介 Celery是一个python开发的异步分布式任务调度模块。 Celery本身并不提供消息服务,使用第三方服务,也就是borker来传递任务,一般使用rabbitMQ或者Redis。 Celery特点 简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的。 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务。 快速:一个单进程的celery每分钟可处理上百万个任务。 灵活: 几乎celery的各个组件都可以被扩展及自定制。 Celery工作流程图 python-Celery celery安装使用 安装Celery模块 1 pip install celery Celery的默认broker是RabbitMQ,仅需配置一行 1 broker_url = 'amqp://guest:guest@localhost:5672//' RabbitMQ的安装点击 Using RabbitMQ 查看。 redis作为broker也可以。 安装 1 pip install redis 配置 broker_url配置redis数据库地址,格式为 redis://:password@hostname:port/db_number 。 backend配置任务结果存储位置,将保存每个任务的执行结果。

Linux:定时任务crond服务

橙三吉。 提交于 2019-11-30 22:11:30
一、crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程, crontab依赖的服务就是crond ,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 这个crond定时任务服务就相当于我们生活中的闹钟 ! 由于crond 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务: 1 2 3 4 5 6 7 8 /sbin/service crond start // 启动服务 /sbin/service crond stop // 关闭服务 /sbin/service crond restart // 重启服务 /sbin/service crond reload // 重新载入配置 或者使用下面的命令: /etc/init .d /crond start /etc/init .d /crond restart /etc/init .d /crond stop 设置crond服务开机自启动: 1 [root@gin tmp] # chkconfig crond on 特殊需要:crond服务搞不定了,一般工作中写脚本守护程序执行: 1 2 3 4 5 6 [root

一文读懂分布式任务调度平台XXL-JOB

荒凉一梦 提交于 2019-11-30 21:33:23
本文主要介绍分布式任务调度平台XXL-JOB(v2.1.0版本),包括功能特性、实现原理、优缺点、同类框架比较等 基本介绍 项目开发中,常常以下场景需要分布式任务调度: 同一服务多个实例的任务存在互斥时,需要统一协调 定时任务的执行需要支持高可用、监控运维、故障告警 需要统一管理和追踪各个服务节点定时任务的运行情况,以及任务属性信息,例如任务所属服务、所属责任人 因此,XXL-JOB应运而生: XXL-JOB是一个开源的轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展、开箱即用,其中“XXL”是主要作者,大众点评 许雪里 名字的缩写 自2015年开源以来,已接入数百家公司的线上产品线,接入场景涉及电商业务,O2O业务和大数据作业等 功能特性 主要功能特性如下: 简单灵活 提供Web页面对任务进行管理,管理系统支持用户管理、权限控制; 支持容器部署; 支持通过通用HTTP提供跨平台任务调度; 丰富的任务管理功能 支持页面对任务CRUD操作; 支持在页面编写脚本任务、命令行任务、Java代码任务并执行; 支持任务级联编排,父任务执行结束后触发子任务执行; 支持设置任务优先级; 支持设置指定任务执行节点路由策略,包括轮询、随机、广播、故障转移、忙碌转移等; 支持Cron方式、任务依赖、调度中心API接口方式触发任务执行 高性能

实现Spring中的任务调度及异步执行

不想你离开。 提交于 2019-11-29 23:35:41
首先要端正一下本人的态度,开发了很长时间的Java Web项目,寄托于Spring MVC的架构,多数时间都是在处理业务逻辑问题,所以我个人单纯地认为Web开发,多线程的应用场景应该不多,能不用尽量不用(当然,有这样的想法,那也是我个人多线程运用不多,理解不是很深刻,而且多线程并发操作需要面对和处理的问题很多,像共享资源上锁等)。但现在需要用到了,才明白多线程的应用场景是多么的重要。所以这几天开始在多线程方面进行了研究,下面总结我这几天的理解和认知。 先阐述下,我在Web项目开发中为什么会用到多线程?项目背景是这样的:门户网站中添加了页面静态化的功能,那对于静态页面内容的更新,采用什么更新策略呢?我用的是最简单的方法,启用定时任务,每隔一段指定的时间清空静态页面文件所在的目录(关于这点,如果有更好做法或建议的,请指点一哈),在项目开始运行时,就启用定时任务开始工作。显然,启用定时任务,可以简化认为开始一个新的线程,来专门执行删除静态页面文件的操作。 为了实现上述的功能,不需要我们从最原始的多线程编程方式入手,通过网上的搜索,大致有三种解决方案。如下: 使用Quartz开源任务调度框架。 使用JDK Timer类。 使用Spring“原生态”的Spring Task。 针对前两种方法,Spring都给予了完美的封装和整合。那么关于Quartz和JDK Timer是什么,做什么,怎么用