❶ Python主要要学那些课程啊
链接:
贺圣军Python轻松入门到项目实战(经典完整版)(超清视频)网络网盘
没有像jstack那么方便直接用的东西,一般来说有几个方案:
IDE: 用诸如 PyCharm, Eclpise with Pydev 的工具调试版,觉得挂起的时候暂停并权检查各个调用栈。
GDB: 优点是可以调试到native extension,缺点也很明显,需要在编译Python的时候加上Debug Symbols,默认这个是没有的。简单的说就是功能强大但是配得麻烦。
pdb:适合下断点...
pudb: 改下代码,在程序入口import pudb; pudb.set_interrupt_handler(),在运行的时候就可以Ctrl-C进入到交互式调试环境,易用性还好吧。
撸一个singal handler用于打印所有栈信息,参考 celery 实现的 install_cry_handler,或者看看 signalhandler,这个在 Python 3.3 自带了。
❸ 初学者怎么学习Python
Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等等。
那Python是一种什么语言?
首先,我们普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算机干活的CPU只认识机器指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。而不同的编程语言,干同一个活,编写的代码量,差距也很大。
比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。
所以Python是一种相当高级的语言。
你也许会问,代码少还不好?代码少的代价是运行速度慢,C程序运行1秒钟,Java程序可能需要2秒,而Python程序可能就需要10秒。
那是不是越低级的程序越难学,越高级的程序越简单?表面上来说,是的,但是,在非常高的抽象计算中,高级的Python程序设计也是非常难学的,所以,高级程序语言不等于简单。
但是,对于初学者和完成普通任务,Python语言是非常简单易用的。连Google都在大规模使用Python,你就不用担心学了会没用。
用Python可以做什么?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦。
Python当然也有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。
如果你是小白用户,满足以下条件:
会使用电脑,但从来没写过程序;
还记得初中数学学的方程式和一点点代数知识;
想从编程小白变成专业的软件架构师;
每天能抽出一个半小时学习。可以看下面的代码
learning=input('DoyouwanttolearnPythonnow(YesorNo):')
a=str(learning)
ifa=='Yes':
print('QQ1129834903')
else:
print('Thanks!!')
❹ 如何在多个机器上搭建celery的集群环境
1、torm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node)。其分别对应的角色如下:
主控节点(Master Node)上运行一个被称为Nimbus的后台程序,它负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态。Nimbus的作用类似于Hadoop中JobTracker的角色。
每个工作节点(Work Node)上运行一个被称为Supervisor的后台程序。Supervisor负责监听从Nimbus分配给它执行的任务,据此启动或停止执行任务的工作进程。每一个工作进程执行一个Topology的子集;一个运行中的Topology由分布在不同工作节点上的多个工作进程组成。
Nimbus和Supervisor节点之间所有的协调工作是通过Zookeeper集群来实现的。此外,Nimbus和Supervisor进程都是快速失败(fail-fast)和无状态(stateless)的;Storm集群所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。这意味着你可以用kill -9来杀死Nimbus和Supervisor进程,它们在重启后可以继续工作。这个设计使得Storm集群拥有不可思议的稳定性。
如何安装部署Storm集群
这一章节将详细描述如何搭建一个Storm集群。下面是接下来需要依次完成的安装步骤:•搭建Zookeeper集群;•安装Storm依赖库;•下载并解压Storm发布版本;•修改storm.yaml配置文件;•启动Storm各个后台进程。
2.1 搭建Zookeeper集群
Storm使用Zookeeper协调集群,由于Zookeeper并不用于消息传递,所以Storm给Zookeeper带来的压力相当低。大多数情况下,单个节点的Zookeeper集群足够胜任,不过为了确保故障恢复或者部署大规模Storm集群,可能需要更大规模节点的Zookeeper集群(对于Zookeeper集群的话,官方推荐的最小节点数为3个)。在Zookeeper集群的每台机器上完成以下安装部署步骤:
1)下载安装Java JDK,官方下载链接为javasuncom/javase/downloads/indexjsp,JDK版本为JDK 6或以上。
2)根据Zookeeper集群的负载情况,合理设置Java堆大小,尽可能避免发生swap,导致Zookeeper性能下降。保守期间,4GB内存的机器可以为Zookeeper分配3GB最大堆空间。
3)下载后解压安装Zookeeper包,官方下载链接为hadoopapacheorg/zookeeper/releaseshtml。
4)根据Zookeeper集群节点情况,创建如下格式的Zookeeper配置文件zoo.cfg:tickTime=2000dataDir=/var/zookeeper/clientPort=2181initLimit=5syncLimit=2server.1=zoo1:2888:3888server.2=zoo2:2888:3888server.3=zoo3:2888:3888
其中,dataDir指定Zookeeper的数据文件目录;其中server.id=host:port:port,id是为每个Zookeeper节点的编号,保存在dataDir目录下的myid文件中,zoo1~zoo3表示各个Zookeeper节点的hostname,第一个port是用于连接leader的端口,第二个port是用于leader选举的端口。
5)在dataDir目录下创建myid文件,文件中只包含一行,且内容为该节点对应的server.id中的id编号。
6)启动Zookeeper服务:
java -cp zookeeper.jar:lib/log4j-1.2.15.jar:conf \ org.apache.zookeeper.server.quorum.QuorumPeerMain zoo.cfg
也可以通过bin/zkServer.sh脚本启动Zookeeper服务。
7)通过Zookeeper客户端测试服务是否可用:•Java客户端下,执行如下命令:
java -cp zookeeper.jar:src/java/lib/log4j-1.2.15.jar:conf:src/java/lib/jline-0.9.94.jar \ org.apache.zookeeper.ZooKeeperMain -server 127.0.0.1:2181
也可以通过bin/zkCli.sh脚本启动Zookeeper Java客户端。•C客户端下,进入src/c目录下,编译单线程或多线程客户端:
./configuremake cli_stmake cli_mt
运行进入C客户端:
cli_st 127.0.0.1:2181cli_mt 127.0.0.1:2181
至此,完成了Zookeeper集群的部署与启动。
3、向集群提交任务
1)启动Storm Topology:
storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3
其中,allmycode.jar是包含Topology实现代码的jar包,org.me.MyTopology的main方法是Topology的入口,arg1、arg2和arg3为org.me.MyTopology执行时需要传入的参数。
2)停止Storm Topology:
storm kill {toponame}
其中,{toponame}为Topology提交到Storm集群时指定的Topology任务名称。
❺ Celery 周期任务运行一段时间后意外停止
用Python Django做了一个网站。后端有些周期抓数据的需求,分布式任务队列 Celery 派上了用场。
投入使用后,发现一个问题,运行一段时间后,周期更新的数据刷新时间停留在几天之前,Celery任务莫名其妙就不起作用了。查看日志,Celery beat日志是按周期在更新,但Celery worker日志停留在几天之前。查看进程,beat、worker进程均运行良好。一头雾水。每次碰到这种情况,只能重启。然后过一段时间又不起作用了,断断续续困扰大半年时间。
曾经也暗骂python轮子咋这样不靠谱,甚至也想转投java的怀抱,用spring boot搞一下。略一思考,转投java也有切换成本,换过去之后,也会碰到这样那样的问题。如果这个技术栈上碰到问题解决不了,换个技术栈碰到问题可能还是束手或山无策。换晌携到java的好处可能是使用广泛,有问题都是别人已经趟过的坑,容易找到借鉴经验。小众的技术栈就没这么好的待遇了。
那么,想办法解决问题吧。
在google多番搜索,有一些线索可供参考。其中一个是说psycopg2、与postgres使用时可能会死锁。原因是postgres使用ssl时在一个callback中加了个锁,但是个callback是共用的,postgres自己unload时会释放这个锁,但是其他使用这个callback的并不知道,然后就死锁了。解决方案是把psycopg2升级到2.6版本以上。
具体可以参考Media上这篇文章。 https://medium.com/squad-engineering/two-years-with-celery-in-proction-bug-fix-edition-22238669601d
但是我的版本已经是2.8了。所以这个解决方案并不能完全适用于我的问题。不过死锁还是给了我启发。可能celery worker执行某个任务时卡死了。
沿着这个线索继续探索吧。
OK,查死锁,下面进入debug阶段。
看得出来有2个任务是active状态,但是把timestamp转化一下,是2天之前了。这2个任务不可能要运行这么长时间的。那么肯定是卡住了。
Media文章里用的strace看卡哪了,嗯,可以效仿。一试,我的vps并没安装这个命令对应的库。好吗,毕竟买的廉价低配版,不增加负担。不就是要打印调用栈么,用cat /proc/{pid}/stack。
可以看得出来,一个卡在了tcp wait recv_msg上了。一个卡在了pipe_wait上了。2个任务都卡在了IO等待上。
这2个应该都不是死锁,抓取数据tcp请求不可能会死锁的,还是应该要设置超时时间。至衫谨中于pipe,可能生产者意外退出,导致消费者拿不到数据而一直死等。
IO相关操作设置超时时间。