当前位置: 首页 > news >正文

科技类网站傻瓜式安卓app开发工具

科技类网站,傻瓜式安卓app开发工具,建设专业网站,中职高一网站建设试题2019独角兽企业重金招聘Python工程师标准 python多进程 进程简介 进程是程序在计算机上的一次执行活动。当你运行一个程序#xff0c;你就启动了一个进程。显然#xff0c;程序是死的(静态的)#xff0c;进程是活的(动态的)。进程可以分为系统进程和用户进程。… 2019独角兽企业重金招聘Python工程师标准 python多进程 进程简介 进程是程序在计算机上的一次执行活动。当你运行一个程序你就启动了一个进程。显然程序是死的(静态的)进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程它们就是处于运行状态下的操作系统本身用户进程就不必我多讲了吧所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。 在操作系统的管理下所有正在运行的进程轮流使用CPU每个进程允许占用CPU的时间非常短(比如10毫秒)这样用户根本感觉不出来CPU是在轮流为多个进程服务就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。 进程和线程 进程(process)和线程(thread) 单个CPU一次只能运行一个任务在任一时刻CPU总是运行一个进程其他进程处于非运行状态 一个进程可以包含多个线程 进程没有任何共享状态进程修改的数据改动仅限于该进程内 一个进程的内存空间是共享的每个线程都可以使用这些共享内存 一个线程使用某些共享内存时其他线程必须等它结束才能使用这一块内存防止多个线程同时读写某一块内存区域采用互斥锁(Mutual exclusion缩写Mutex) 某些内存区域只能供给固定数目的线程使用此时通过信号量(Semaphore)保证多个线程不会互相冲突 多进程形式运行多个任务同时运行多线程形式允许单个任务分成不同的部分运行 多线程使用的是cpu的一个核适合io密集型 多进程使用的是cpu的多个核适合运算密集型。 在linux中可以使用ps -efL查看进程和线程ID。以memcached进程为例输出结果如下 1 2 3 4 5 6 7 8 9 10 11 12 [rootVM_0_4_centos ~]# ps -efL |grep memcached root 24421 1 24421 0 10 May19 ? 00:00:03 memcached -d -u root root 24421 1 24422 0 10 May19 ? 00:00:01 memcached -d -u root root 24421 1 24423 0 10 May19 ? 00:00:00 memcached -d -u root root 24421 1 24424 0 10 May19 ? 00:00:00 memcached -d -u root root 24421 1 24425 0 10 May19 ? 00:00:00 memcached -d -u root root 24421 1 24426 0 10 May19 ? 00:00:00 memcached -d -u root root 24421 1 24427 0 10 May19 ? 00:00:00 memcached -d -u root root 24421 1 24428 0 10 May19 ? 00:00:00 memcached -d -u root root 24421 1 24429 0 10 May19 ? 00:00:09 memcached -d -u root root 24421 1 24430 0 10 May19 ? 00:00:00 memcached -d -u root root 32169 31101 32169 0 1 23:23 pts/0 00:00:00 grep --colorauto memcached   第一行UID(用户ID)第二行为PID(进程ID)第三行PPID(父进程ID)第四行LWP(线程ID)。 从示例可以看出进程24421子进程有10个对应线程ID分别为24421-24430。 multiprocess python中的多线程无法利用多核优势若要充分使用多核CPU资源在python中大部分情况使用多进程。python提供了非常好用的多进程包multiprocessing。 multiprocessing模块用来开启子进程并在子进程中执行我们定制的任务比如函数该模块与多线程模块threading的编程接口类似。 multiprocessing模块的功能众多支持子进程、通信和共享数据、执行不同形式的同步提供了Process、Queue、Pipe、Lock等组件。 Process类 创建一个Process对象 1 p multiprocessing.Process(targetworker_1, args(2, ))   参数 target函数名字 args函数需要的参数以tuple的形式传入(单个元素的tuple必须有逗号) 方法 p.is_alive() 判断进程p是否存活是返回True p.run() 启动进程它去调用target指定的函数 p.start() 启动进程它会自动调用run方法推荐使用start p.join(timeout) 主线程等待p终止(主线程处于等的状态p处于运行状态)。p.join只能join使用start开启的进程不能join使用run开启的进程 p.terminate() 强制进程p退出不会进行任何清理操作如果p创建了子进程该子进程就变成了僵尸进程 属性 p.name 进程的名字 p.pid 进程的pid p.daemon 默认为False如果设置为True代表p为后台运行的守护进程当p的父进程终止时p也随之终止并且设置为True后p不能创建自己的新进程必须在p.start()之前设置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import multiprocessing import timedef worker(args, interval):print(start worker {0}.format(args))time.sleep(interval)print(end worker {0}.format(args))def main():print(start main)p1 multiprocessing.Process(targetworker, args(1, 1))p2 multiprocessing.Process(targetworker, args(2, 2))p3 multiprocessing.Process(targetworker, args(3, 3))p1.start()p2.start()p3.start()print(end main)if __name__ __main__:main() 输出结果 1 2 3 4 5 6 7 8 start main end main start worker 1 start worker 2 start worker 3 end worker 1 end worker 2 end worker 3   multprocessing用到的两个方法 cpu_count()统计cpu总数 active_children()获得所有子进程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import multiprocessing import timedef worker(args, interval):print(start worker {0}.format(args))time.sleep(interval)print(end worker {0}.format(args))def main():print(start main)p1 multiprocessing.Process(targetworker, args(1, 1))p2 multiprocessing.Process(targetworker, args(2, 2))p3 multiprocessing.Process(targetworker, args(3, 3))p1.start()p1.join(timeout0.5) #此处保证了p1优先执行p2.start()p3.start()print(the number of CPU is: {0}.format(multiprocessing.cpu_count()))for p in multiprocessing.active_children():print(The name of active children is: {0}, pid is: {1} is alive.format(p.name, p.pid))print(end main)if __name__ __main__:main()   输出结果 1 2 3 4 5 6 7 8 9 10 11 12 start main start worker 1 the number of CPU is: 4 The name of active children is: Process-1, pid is: 25360 is alive The name of active children is: Process-2, pid is: 24500 is alive The name of active children is: Process-3, pid is: 26100 is alive end main start worker 3 start worker 2 end worker 1 end worker 2 end worker 3   lock组件 当我们用多进程来读写文件的时候如果一个进程是写文件一个进程是读文件如果两个文件同时进行肯定是不行的必须是文件写结束以后才可以进行读操作。或者是多个进程在共享一些资源的时候同时只能有一个进程进行访问那就要有一个锁机制进行控制。 下面使用2个进程分别进行1和3操作为例 不加锁 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import time import multiprocessingdef add(value, number):print(start add{0} number {1}.format(value, number))for i in range(1, 3):number valuetime.sleep(0.3)print(number {0}.format(number))if __name__ __main__:print(start main)number 0p1 multiprocessing.Process(targetadd, args(1, number))p3 multiprocessing.Process(targetadd, args(3, number))p1.start()p3.start()print(end main) 输出结果 1 2 3 4 5 6 7 8 start main end main start add1 number 0 start add3 number 0 number 1 number 3 number 2 number 6   加锁 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import time import multiprocessingdef add(lock, value, number):with lock:print(start add{0} number {1}.format(value, number))for i in range(1, 3):number valuetime.sleep(0.3)print(number {0}.format(number))if __name__ __main__:print(start main)number 0lock multiprocessing.Lock()p1 multiprocessing.Process(targetadd, args(lock, 1, number))p3 multiprocessing.Process(targetadd, args(lock, 3, number))p1.start()p3.start()print(end main) 输出结果 1 2 3 4 5 6 7 8 start main end main start add1 number 0 number 1 number 2 start add3 number 0 number 3 number 6   锁的获取可以使用lock.acquire()获取lock.release()释放 1 2 3 4 5 6 7 8 9 10 11 12 13 def add(lock, value, number):lock.acquire()print(start add3 number {0}.format(number))try:for i in range(1, 5):number valuetime.sleep(0.3)print(number {0}.format(number))except Exception as e:raise efinally:lock.release()pass   共享内存 一般变量在进程之间是没法进行通讯的但是multiprocessing提供了Value和Array模块可以在不同的进程中使用同一变量。Value和Array结构内部都实现了锁机制因此多进程是安全的。 Value和Array都需要设置其中存放值的类型d是double类型i是int类型。类型设置和array模块的值类似更多的类型可以点击array — Efficient arrays of numeric values查看。 上面的示例中两个进程执行后number结果分别为2和6假如两个进程可以共享变量name输出结果将会是8。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import multiprocessing from multiprocessing import Valuedef add(value, number):print(start add{0} number {1}.format(value, number.value))for i in range(1, 3):number.value valueprint(number {0}.format(number.value))if __name__ __main__:print(start main)number Value(d, 0) #使用Value创建变量p1 multiprocessing.Process(targetadd, args(1, number))p3 multiprocessing.Process(targetadd, args(3, number))p1.start()p3.start()print(end main)   输出结果 1 2 3 4 5 6 7 8 start main end main start add1 number 0.0 start add3 number 0.0 number 1.0 number 4.0 number 5.0 number 8.0   number最终结果是8但是具体输出结果每次执行可能存在差异。 更多关于multiprocessing的内容可以点击multiprocessing — Process-based parallelism查看官方介绍。 Share 转载于:https://my.oschina.net/u/3803404/blog/1815848
http://wiki.neutronadmin.com/news/366395/

相关文章:

  • 网站开发类论文题目网站制作做网站
  • 县区网站服务器机房建设为什么大家用wordpress建网站
  • 免费域名映射南宁百度seo网站优化
  • 神马搜索推广西安官网优化技术
  • 合肥网站建设报价西安未央区今天出啥事了
  • 濮阳网站建设熊掌号力软框架做网站
  • php网站开发图文教程机场建设集团网站
  • 广州建设厅官方网站邵阳营销型网站建设
  • 学做网站必须php吗网上学设计的培训机构
  • 如何制作手机网页最简单的方法长春网站快速优化排名
  • 厦门响应式网站建设广州营销型网站制作
  • 电商公司网站建设财务核算wordpress 多色主题
  • 网站开发都是用什么框架河北seo搜索引擎优化
  • 模板做的网站如何下载新乡网站建设新乡
  • 做的网站里面显示乱码怎么解决整合营销推广策略
  • 抓取资源的网站怎么做免费网站开发公司
  • 网站建站建设哪家好桂林市是几线城市
  • 推广网站广告有哪些望牛墩东莞网站建设
  • 怎么查网站制作空间有效期qq企业邮箱怎么申请
  • 四川广安网站建设城市中国商业网站平台
  • 沈阳建设工程信息网站品牌营销传播
  • 东莞南城网站设计做网站公司如何选
  • 互联网行业建设网站天津建设工程新希望
  • 巴彦淖尔市网站制作网站建设公司专业开发北京网站
  • 做网站属于什么技术台州网站开发建设
  • 网站优化需要那些工具wordpress入门教程(视频)
  • 济南本地网站小型企业网站模板
  • 长沙多迪php网站开发培训学校网站建设与依法行政
  • 做一个付费网站多少钱网站开发后怎么转安卓app
  • 新闻资讯网站备案四川网站开发制作