1、如下代码,启动的时候python app.py会报如题的错误

app.py

#!/user/bin python
# -*- coding:utf-8 -*- import os
from datetime import timedelta
from flask import Flask, session, url_for, render_template, make_response, request, redirect
import zerorpcimport multiprocessing APP = Flask(__name__)
APP.secret_key = os.urandom(24)
APP.permanent_session_lifetime = timedelta(seconds=30 * 24 * 60 * 60)
class RPCServer(object):
def hello(self, filename):
      return filename

@APP.route('/')
@APP.route('/index')
def index():
return render_template('index.html') @APP.route('/ok.htm',methods=['GET', 'POST','HEAD'])
def ok():
return render_template('ok.htm') @APP.route('/test')
def test():
session.permanent = True
_str = ''
if 'name' in session:
_str = session['name']
if 'nick' in session:
_str += '---' + session['nick']
#print session
return _str def runWeb():
print ("start webapp")
APP.run(host='0.0.0.0', port= 5000, debug=True, threaded=True) def runRPC():
#print "start rpc"
s = zerorpc.Server(RPCServer())
s.bind("tcp://0.0.0.0:4242")
s.run() if __name__ == "__main__":
p1 = multiprocessing.Process(target = runWeb)
p2 = multiprocessing.Process(target = runRPC) p1.start()
p2.start()
p1.join()
p2.join() # p1.run()
# p2.run() # p1.join()
# p2.join()

2、错误信息:

3、查看进程情况:

4、lsof -i:4242 、lsof -i:5000查看端口情况,发现rpc服务并没有启动

5、但是如果关掉flask的debug模式,就没有问题

6、原因是:flask的debug模式会额外开启一个进程,这个进程负责监控代码是否发生变化,如果发生变化,会自动重启应用,使新修改代码立即自动生效;因此我猜想,是这个进程破坏了rpc服务的启动。

DEBUG模式下flask多开一个线程来监视项目的变化。

The first thing it does is start the main function in a new thread so it can monitor >the source files and restart the thread when they change.

参考自这篇文章http://stackoverflow.com/questions/9276078/whats-the-right-approach-for-calling-functions-after-a-flask-app-is-run

如果你想要避免加载两次,应该设置app.run(debug=True, use_reloader=False)

参考:

1、https://github.com/ipython/ipython/issues/6109

2、https://segmentfault.com/q/1010000000446372

3、

最新文章

  1. [转]Oracle VM VirtualBox虚拟机,Ubuntu虚拟机共享文件夹
  2. viewpage listview gridview加载本地大图多图OOM处理办法
  3. 封装Js库从获取控件的value值开始
  4. Dreamweaver修改页面编码
  5. Hive基本命令整理
  6. 【转】sublime text 2 下的Markdown写作
  7. 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)
  8. css 单位 px em rem
  9. pyqt之倒计时例子
  10. 蚁群算法和简要matlab来源
  11. 学习multiprocessing(2)
  12. XJOI练习2神奇的供水系统
  13. Program Thread 和 Process的不同点
  14. 并发编程(一)—— volatile关键字和 atomic包
  15. LVS,Keepalived,HAproxy区别与联系
  16. spring框架学习之--数据库操作增删改查
  17. springboot之使用redistemplate优雅地操作redis
  18. jQuery控制元素显示、隐藏、切换、滑动的方法
  19. oracle的sqlldr常见问题
  20. 把自己的代码发布到npm(npm publish)

热门文章

  1. Devops 技术图谱
  2. Linux-RedHat7.2 安装nginx托管.net core2.0
  3. vue :class 可以接收 字符串 数组 和 对象 对象里面的key值 根据true或false 显示不显示
  4. source 1.7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式)
  5. 模拟、字符串--P1042 乒乓球 题解
  6. C++学习周记
  7. 文本三剑客之grep
  8. 痛苦的版本对齐(3) cygwin下的路径引用(sed解决篇)
  9. Device eth0 does not seem to be present,delaying initialization问题
  10. SpringCloud源码地址