PyV8在服务端运行自动崩溃问题
近来想在服务端架设WSGI + PyV8去自动解析JavaScript代码,然后返回解析后的数据给客户端。但是发现,在nginx配置后,客户端一请求,服务端的python脚本自动崩溃。
见代码:
def myapp(environ, start_response):
res = "OK"
header = [('Content-Type', 'text/plain')]
jsfile= open("D:\ots\python\\getsign.js", "rb"); ctxt=PyV8.JSContext()
ctxt.__enter__()
ctxt.eval(jsfile.read().encode('utf-8'))
getSign=ctxt.locals.getsign
res = getSign() jsfile.close()
res = res.encode('utf-8')
start_response('200 OK',header)
return res if __name__ == '__main__':
WSGIServer(myapp,bindAddress=('127.0.0.1',8011)).run()
然后百思不得其解,一直在网上寻找资料,一直得不到具体的解决方案。后来重新看了PyV8的文档,发现了这样的一个重大问题:
注意的是PyV8并非是线程安全的,因此在多线程环境下要加入全局锁。
然后重新写了一下代码,加入了全局锁,
PyV8.JSLocker(),问题得以解决。见如下代码:
def myapp(environ, start_response):
res = "OK"
header = [('Content-Type', 'text/plain')]
jsfile= open("D:\ots\python\\getsign.js", "rb"); with PyV8.JSLocker():'''加入全局锁机制'''
ctxt=PyV8.JSContext()
ctxt.__enter__()
ctxt.eval(jsfile.read().encode('utf-8'))
getSign=ctxt.locals.getsign
res = getSign()
ctxt.leave()'''退出全局锁'''
jsfile.close()
res = res.encode('utf-8')
start_response('200 OK',header)
return res if __name__ == '__main__':
WSGIServer(myapp,bindAddress=('127.0.0.1',8011)).run()
PyV8在服务端运行自动崩溃问题的更多相关文章
- Go 语言,开源服务端代码自动生成 框架 - EasyGoServer
EasyGoServer 作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblog ...
- egametang框架服务端运行流程
et框架的构建块主要由entity和componet组成,类似unity的组件.一个Entity可以挂载多个不同Component.Entity和Component的共同基类Disposer用于提供对 ...
- 关于,java-webservice接口,根据服务端,自动生成客户端调用时,响应时间慢
我这边遇到的问题,是在和对方进行webservice接口交互的时候,用工具,调用对方的webservice接口,对方响应很快.但是用java生成的客户端调用就会很慢才得到响应.大概有5分钟左右. 这里 ...
- 看懂 游戏《Minecraft》的崩溃报告 服务端/客户端
如何看懂Minecraft报错的关键信息. 让你如何看懂Minecraft报错 前言 一些俏皮话 寻找崩溃日志 打开崩溃日志 重要的事说三遍 下载文本编辑器 开始分析 深度分析 得出结论 修复报错 解 ...
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- .Net Mvc3框架调用服务端控件解决方案
/*BY:Wangyexin date:2011年4月30日 20:17:38*/ /*说明:.net mvc3框架,View层调用服务端控件,输出到.cshtml文件中显示*/ 1.先说说.ne ...
- Angular开发实践(六):服务端渲染
Angular Universal Angular在服务端渲染方面提供一套前后端同构解决方案,它就是 Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术. 标 ...
- 服务端预渲染之Nuxt(介绍篇)
现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的 ...
- 解析Nuxt.js Vue服务端渲染摸索
本篇文章主要介绍了详解Nuxt.js Vue服务端渲染摸索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Nuxt.js 十分简单易用.一个简单 ...
随机推荐
- vc++ windows 创建桌面快捷方式
创建桌面快捷方式 在windows软件开发中,软件安装过程中总是需要在桌面创建快捷方式,下面介绍一种创建桌面快捷方式的方法,具体代码如下: /* * 创建快捷方式 * szExePath[in]:要创 ...
- C语言内存对齐对则
这篇文章讲的非常好 : http://blog.csdn.net/hairetz/article/details/4084088 用空间换时间, 规则 : 每个数据成员存储的起始位置都要是它的整数 ...
- LINUX 11G RAC ASM磁盘组在线增加磁盘扩容
LINUX 11G RAC ASM磁盘组在线增加磁盘扩容 1.操作系统版本 OEL 6.1 [root@cqltjcpt1 ~]# more /etc/redhat-release Red Hat E ...
- awk 内容
awk相关内容 #只要文件中的路径,不要文件名: [ ...
- debian修改主机名
hostnamectl set-hostname aaa 或者 vim /etc/hostname 记得更新 /etc/hosts
- 配置和启动脚本(bash shell学习01)
bash是 Bourne Again Shell简称 ,从unix系统的sh发展而来 查看当前shellecho $SHELL查看系统支持的shellcat /etc/shells cd /binls ...
- php单链表实现
php单链表实现 <?php //单链表 class Hero{ public $no; public $name; public $nickname; public $next=null; f ...
- (转)Apache转发配置
本文转载自:http://blog.csdn.net/leshjmail/article/details/6163581 安装文件 1.httpd-2.2.15-win32-x86-no_ssl.ms ...
- java代码从键盘输入n的值,计算1+1/2+1/3+...+1/n的值,,
总结:谢谢陈勇老师.很棒的指导.超有爱. 总是不思考++++如内存的分析.堆和栈.堆内存里对象,字符串,栈里基本数据类型 来龙去脉,属性方法的调用,都不是很理解.... package com.c2; ...
- 分布式缓存系统 Memcached 主线程之main函数
前两节中对工作线程的工作流程做了较为详细的分析,现把其主要流程总结为下图: 接下来本节主要分析主线程相关的函数设计,主函数main的基本流程如下图所示: 对于主线程中的工作线程的初始化到启动所有的工作 ...