Jump to Navigation

脚本编程

脚本语言,ruby/python/php/shell

gRPC对PHP的支持情况说明

gRPC对PHP的支持情况说明

gRPC设计能够支持大多数常用编程语言,PHP也不例外。

不过由于gRPC对不同语言的支持力度不一样,有些语言支持的非常完善,

而有些语言支持的不够完善,甚至达不到能够使用程度。

很不幸的是PHP语言正是支持力度非常靠后的一种语言。

gRPC包括客户端部分和服务端部分,对不同的语言也同时分为这两个部分。

以前从这两个部分说明gRPC的 PHP支持情况,软件包使用的是各包最新的有版本号的beta状态的包。

(也许还可以完全部使用仓库的HEAD版本进行测试,结果也许有所不同,后续有测试之后补上。)

基础依赖包

  • gRPC C实现包和运行库
  • protobuf实现包和运行库
  • PHP-5.5+

对PHP客户端的支持

客户端的支持,需要几个模块的配合使用,

Go调用gRPC服务两例

Go调用gRPC服务两例

先上两段Go语言客户端调用gRPC服务的示例代码:

GO运行时环境变量

GO运行时环境变量

介绍

Go运行时,是除了普通用途的垃圾回收,goroutine调度,计时器,网络poll功能外,开启额外的调试输出,

或者改变运行时本身行为的工具。

这些工具是通过传递给go程序的环境变量控制的。本篇文档描述了运行时支持的4个主要环境变量的功能。

这4个主要环境变量是,GOGC,GOTRACEBACK,GOMAXPROCS, GODEBUG。

GOGC

GOGC是Go运行时支持的最老的环境变量之一。它甚至比GOROOT还老,但却不广为人知。

GOGC控制垃圾回收的不良影响。其默认值为100,表达的含义是垃圾收集器直到达到上次收集的100%时才会被触发。

简单来说,默认情况下垃圾回收会在每次堆使用翻倍执行。

如果设置为更大的值,如GOGC=200,将会推迟垃圾回收直到堆增涨到前一次的200%。

如果设置为更小的值,如GOGC=20,意味着垃圾回收会更频繁的执行,并且在每次触发回收前能够分配的数据越来越少。

设置GOGC=off将会完全关闭垃圾回收。

cargo的依赖处理

cargo的依赖处理,

三种依赖配置方式:

[dependencies]
depend-pkg-name="pkg-version or *"
depend-pkg-name={git = "git repo", rev = "bfabc843ef2"}
depend-pkg-name={path = "./helloutils"}   #支持绝对路径,相对路径。

一些释疑

在编译时,cargo首先从https://github.com/rust-lang/crates.io-index下载官方所有crate的索引列表。

crate索引crates.io-index大小达到31M,估计以后还会变得更大。

下载依赖包的过程是递归的。

索引列表放在什么位置呢?~/.cargo。

如何指定本地某一目录下的crate呢?$CARGO_HOME,设置该变量后,~/.cargo位置被覆盖了。

本地搜索一个crate的机制,从该项目目录开始,逐级向上查找带.cargo目录的位置。

上否支持多个$CARGO_HOME路径呢?

python字符串转hex

python字符串与hex转换,还挺麻烦的,而且发现不同版本还处理方式不一样。

找了段适用python 2.6-3.5的转换代码,可以容易在任何项目中使用了,

使用Python调用执行JavaScript的几种方式

python-spidermonkey

目前只支持python2

停止开发的起始项目:https://github.com/garywiz/python-spidermonkey

相对新的clone项目:https://github.com/smurfix/python-spidermonkey/

PyExecJS

比较新的一个项目,以插件的方式,支持不同的JS引擎,

像v8,nodejs,spidermonkey等。

并且该项目支持python3。

主项目停止更新有一段时间,但clone项目今年最近还有更新,

官方项目仓库: https://github.com/doloopwhile/PyExecJS

相对新的clone项目:https://github.com/Timtam/PyExecJS

附注

这两个项目使用的方式,其他语言中也可以采用,不过要做许多的封装。

从测试来看,PyExecJS安装简单,使用也非常方便,在项目中可以用这个了。

在PyQt5中使用Qt DBus的延时响应返回

在PyQt5中使用Qt DBus的延时响应返回

### dbus介绍
dbus是一种现代linux系统中的本机RPC调用实现,实现了程序间的松耦合依赖。

### RPC调用
RPC调用可分为同步调用和异步调用。
常用的同步调用很容易理解,就是调用并一直等待RPC服务器端的返回值。
异步调用,是针对某次耗时的RPC调用而言,像文件操作,或者是网络操作,或者计算操作。
如果再一直等待服务器端的返回,客户端的效率将非常低下。

### 原始DBus的方式
dbus是使用了异步IO回调方式,所以并不存在所谓的延时响应返回问题。
因为所有的调用都可以看作是异步的,延时的。
不过dbus提供了一个超时机制,如果超时,则dbus调用端不再接收响应返回值了。

### Qt DBus的方式
在Qt中,把DBus的服务,调用响应封装成为Qt的QObject和slots,从而简化DBus的使用。
同时,默认情况下,Qt还把对应slots的返回作为DBus调用结束的标志。
这样就引入一个问题,如果在这个slots中无法立即完成一个dbus调用,应该怎么处理?

python开发两项小记

最近用python做了些试验性开发,除了前面一篇的的语法缩进规范不爽之外,其他的还可以。

1、打包方式
最近使用python开发了小工具程序,然后自然想到了打包,顺便总结下了python的打包方式。

python的打包一般使用setup.py的方式,
但setup.py其实是一段python程序,根据不同的打包要求,格式也不相同。
setup.py包括以下几种:
* pip规范
*

这些规范适合系统机打包,依赖可以邮包管理来处理。
还有一种比较特殊的,类似静态打包的要求,当然也有多个选择:
* cxfreeze项目
* pyinstaller项目
* py2exe项目

这种需求比较少,虽然有选择,但也不是哪一个都能满足所有要求。
cxfreeze支持全平台,支持py3k,但不支持打包为单一文件。
pyinstaller项目,支持全平台,实验支持py3k,不完善。
py2exe支持windows平台,支持打包为单一文件。

目前看比较方便的cxfreeze,也先使用了这个作为基础工具。

以上是关于打包的一点总结。

115syncd项目介绍

115网盘是个比较好用的网盘,提供比较大的磁盘容量。

该115syncd项目主要提供以下功能,
自动模拟登陆115网盘api。
以服务模式运行。
指定本地目录以及对应的115网盘目录。
监控指定目录,如有目录或者文件发生变化,则自动上传到115网盘对应的目录。
指定目录对可配置多个。
本地目录与网盘目录能够保持一到,在缺少目录时自动创建。
支持任务队列式并发上传控制,默认3个并发上传。
文件上传采用POST协议方式,有上传文件大小限制。
能够自动过滤掉一些指定的临时文件。
能够实现仅上传模式功能,即本地删除而网盘不删除,这样保持本地空间远小于网盘空间。
反复修改重复上传的文件,根据哈希去重,只保留最近一次上传的文件。

该实现使用PyQt5,在linux系统上安装使用都非常简便。
项目地址:https://github.com/kitech/115syncd

页面

订阅 RSS - 脚本编程


Main menu 2

by Dr. Radut