近来想在服务端架设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在服务端运行自动崩溃问题的更多相关文章

  1. Go 语言,开源服务端代码自动生成 框架 - EasyGoServer

    EasyGoServer 作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblog ...

  2. egametang框架服务端运行流程

    et框架的构建块主要由entity和componet组成,类似unity的组件.一个Entity可以挂载多个不同Component.Entity和Component的共同基类Disposer用于提供对 ...

  3. 关于,java-webservice接口,根据服务端,自动生成客户端调用时,响应时间慢

    我这边遇到的问题,是在和对方进行webservice接口交互的时候,用工具,调用对方的webservice接口,对方响应很快.但是用java生成的客户端调用就会很慢才得到响应.大概有5分钟左右. 这里 ...

  4. 看懂 游戏《Minecraft》的崩溃报告 服务端/客户端

    如何看懂Minecraft报错的关键信息. 让你如何看懂Minecraft报错 前言 一些俏皮话 寻找崩溃日志 打开崩溃日志 重要的事说三遍 下载文本编辑器 开始分析 深度分析 得出结论 修复报错 解 ...

  5. Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  6. .Net Mvc3框架调用服务端控件解决方案

      /*BY:Wangyexin date:2011年4月30日 20:17:38*/ /*说明:.net mvc3框架,View层调用服务端控件,输出到.cshtml文件中显示*/ 1.先说说.ne ...

  7. Angular开发实践(六):服务端渲染

    Angular Universal Angular在服务端渲染方面提供一套前后端同构解决方案,它就是 Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术. 标 ...

  8. 服务端预渲染之Nuxt(介绍篇)

    现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的 ...

  9. 解析Nuxt.js Vue服务端渲染摸索

    本篇文章主要介绍了详解Nuxt.js Vue服务端渲染摸索,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Nuxt.js 十分简单易用.一个简单 ...

随机推荐

  1. ulimit  设置

    1. /etc/security/limit.conf * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc ...

  2. spring mvc从@ResponseBody取到json发现中文乱码

    问题背景:如题. 问题定位:代码跟踪,从源头入手,一步一步跟进,直到设置中文编码的地方. 问题代码: /** * 获取单个测试桩接口内容 * * @author wulinfeng * @param ...

  3. mysql 统计sql

    1.按照月份统计数据 SELECT DATE_FORMAT(d.create_time,'%Y-%m') months,COUNT(id) AS scannum FROM detail d GROUP ...

  4. java代码求输入的三个数的最大值

    package com.c2; import java.util.Random; import java.util.Scanner; //输入10个数,找出最大一个数,并打印出来. public cl ...

  5. 前端自动化工具 -- gulp https://angularjs.org/

    gulp是基于流的前端自动化构建工具. gulp是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用. 同样的,也是包括基本用法和各插件的使用. 二.基本用法--插件使用 gu ...

  6. PHP中GD库的使用

    1.基本步骤 <?php /** * Created by PhpStorm. * User: jiqing * Date: 18-4-9 * Time: 上午9:34 * 熟悉步骤 */ // ...

  7. K12(在线学习的平台)

    项目:K12(在线学习的平台) 一.背景 目的是做一个在线的学习平台,提高学生的课程完成度 K12:大目标是要取代线下班 - 录制专门的视频 - 导师的监管:如果没有主动和那个学生聊天,就扣钱 - 学 ...

  8. Java面向对象-Java类的继承及super关键字

    Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...

  9. leetcode486

    public class Solution { public bool PredictTheWinner(int[] nums) { // int n = nums.Length; // int[,] ...

  10. 虚拟机之 Wordpress博客搭建

    WordPress博客需要LAMP环境,---  LAMP 官网:https://cn.wordpress.org/ wordpress-4.4.1版本环境要求是: php 5.2.4或以上 mysq ...