2009年4月

编译和反编译python程序

当我们运行一个单独的py文件,则python是不会编译该文件为pyc的,而是直接解释运行它


但如果我们的一个py文件作为一个module被其它的py文件import,那么python默认会编译它为pyc文件


pyc文件是python的字节码文件,其实还有一种pyo文件,是优化后的字节码文件


 


如果想编译成pyc文件,可以使用py_comile或compileall模块



折叠复制代码




  1. #编译单个文件

  2. importpy_compile

  3. py_compile.compile('/opt/ysz/python/test.py')


  4. #编译整个目录

  5. importcompileall

  6. compileall.compile_dir('/opt/ysz/python')




或者也可以用如下方式编译



折叠复制代码




  1. #编译pyc

  2. python -m py_compile test.py


  3. #编译pyo

  4. python -O -m py_compile test.py




 有一个网站,可以实现在线反编译pyc,据说能支持到python2.6


http://www.crazy-compilers.com/decompyle/


 

twisted的application运行模式

这2天写一个基于twisted的socket应用
开发是在Windows机器上,最后的运行是在Linux机器上

由于Windows的机器不支持Application的方式运行
所以在开发时,就使用了reactor.run的模式来运行
写了:
if __name__ == '__main__':
      main()

然后在Linux上想以Application的模式运行、于是想当然的又写了一个函数
main_application(),在这个函数里面实现了application的方法
但最后用twistd运行时一直报错
Failed to load application:'application'

后来才发现,application的实现不能写在一个function里
只能是在py的最外层,无奈改成了
if __name__ == "__main__":
    main_reactor()
else:
    bdb = BDBServer()
    db = bdb.db
    from twisted.application import internet,service
    application = service.Application('bdb_server')
    bservices = service.MultiService()
    bdb_service = internet.TCPServer(constants.LISTENPORT,SocketServerFactory(SocketProtocol,bdb,db))
    adm_service = internet.TCPServer(constants.ADMINPORT,SocketServerFactory(SocketAdminProtocol,bdb,db))
    bdb_service.setServiceParent(bservices)
    adm_service.setServiceParent(bservices)
    bservices.setServiceParent(application)


Mysql的last_insert_id

webpy3.0自带的dbbase中使用了last_insert_id来返回刚insert的记录对应的id
由于需要在多线程中使用改db
有些担心这个last_insert_id在多线程中是否有问题

看了一些资料后,发现对last_insert_id是这样描述的:
The ID that was generated is maintained in the server on a per-connection basis
因为它是基于connection的,所以只要保证每个线程对应的是单独的一个connection
那么使用last_insert_id是没有问题的

但如果在多线程中使用select max(id)来获取,可能会有问题的

OpenCMS取消登录失败的限制

OpenCMS系统默认当用户连续登录失败超过3次后,会自动锁定帐号15分钟

如果要修改或取消这个限制,则在opencms-system.xml中增加:

<loginmanager>
    <disableMinutes>0</disableMinutes>
    <maxBadAttempts>10</maxBadAttempts>
</loginmanager>

注意位置一定要放在<sites>的前面,否则会出错的

OpenCMS环境的搭建

最近,邮件的帮助系统准备放在自己的服务器上
为了便于产品人员更新发布页面
所以需要一个简单的CMS系统,然后上网搜了一堆
最后还是瞄准了OpenCMS,开始以为安装和配置应该很简单的
但真正操作后,才发现,这个玩意还真挺复杂的......
记录一下安装配置的过程:

1.OpenCMS是和Tomcat绑定的,开始想把它弄到Resin上,结果发现部署后有问题(也许是还没找到配置的方法吧)
  无奈,就改到Tomcat上了
2.安装过程还是比较简单的,但就是太慢了。安装后,它默认的url会是/opencms/opencms/system/login,如果想把它们给去掉,
  安装时,最好把opencms.war修改成ROOT.war,这样就会去掉第一个/opencms了
3.去掉第2个OpenCMS,参考文档:
  http://localhost/alkacon-documentation/howto_apache_httpd/mod_proxy.html
   修改Apache2的虚机配置:
  ProxyPass         /opencms/                 !    
   RedirectPermanent /opencms/                 http://${DOMAIN_NAME}/        
   ProxyPass         /resources/               !    
   ProxyPass         /export/                  !        
   ProxyPass         /                         http://localhost:8081/opencms/    
   ProxyPassReverse  /                      http://localhost:8081/opencms/
   修改Tomcat的配置:
  <Connector port="8081" protocol="HTTP/1.1"  connectionTimeout="20000"
               redirectPort="8443" useBodyEncodingForURI="true" proxyName="192.168.41.236" proxy Port="80" />
   修改opencms-system.xml
  <workplace-server>http://192.168.41.236</workplace-server>
   <default-uri>/sites/default/</default-uri>
   <site server="http://192.168.41.236" uri="/sites/default/"/>
4.配置多个站点,这个相对来说比较简单,在apache2中增加相应的虚机,同时修改Tomcat的service.xml和opencms-system.xml
5.发布站点时自动export静态文件,需要修改opencms-importexport.xml中的staticexporthandler为CmsAfterPublishStaticExportHandler,这样可以自动导出,使用它默认的handler,似乎是有问题
6.关于和前端的反向代理的配合问题,由于前端都是用mail.test.sohu.com/help来反向代理到OpenCMS的服务器上,这样就有2个问题:
  1)export的路径问题,OpenCMS默认是/export/的,但是我们的站点必须得是/help开头的,需要修改opencms-importexport.xml
        增加如下的规则:
          <rfs-rule>
                    <name>mailhelp</name>
                    <description>This is the rfs-rule for mysite</description>
                    <source>/sites/mailhelp/.*</source>
                    <rfs-prefix>/help/export</rfs-prefix>
                    <exportpath>export</exportpath>
                    <related-system-res>
                        <regex>/system/modules/com.sohu.mail.help/.*</regex>
                        <regex>/system/galleries/pics/mail_pic/.*</regex>
                    </related-system-res>
                </rfs-rule>
    2)页面之间的链接问题:这个问题最是郁闷了,直接用相对路径应该就可以了,比如href="test.html",但发现OpenCMS的html编辑器会自动把它转变成href="/test.html",这样,过前端的反向代理就有问题了,无奈,只能在链接时,手工加上href="/help/test.html",但这样就又碰到了一个问题,预览时会出404。上网Google了几把,没找到解决方案,只能用apache2的Rewrite了,增加一个规则,这样预览就正确了,总觉得这么解决很别扭.....
     RewriteEngine on
        RewriteRule /help/(.*) http://192.168.41.236/$1

最新文章

最近回复

  • feifei435:这两个URI实际是不一样的
  • zsy: git push origin 分支 -f 给力!
  • 冼敏兵:简单易懂,good fit
  • Jack:无需改配置文件,看着累! # gluster volume se...
  • Mr.j:按照你的方法凑效了,折腾死了。。。。
  • zheyemaster:补充一句:我的网站路径:D:\wamp\www ~~菜鸟站长, ...
  • zheyemaster:wamp2.5(apache2.4.9)下局域网访问403错误的...
  • Git中pull对比fetch和merge | 炼似春秋:[…] 首先,我搜索了git pull和git fe...
  • higkoo:总结一下吧, 性能调优示例: gluster volume s...
  • knowaeap:请问一下博主,你维护的openyoudao支持opensuse吗

分类

归档

其它