work

最简单的线程池

心不动则不痛 提交于 2020-01-12 18:24:24
=================== thread_pool.h =============================== #ifndef THREAD_POOL_H__ #define THREAD_POOL_H__ #include <pthread.h> /* 要执行的任务链表 */ typedef struct tpool_work { void* (*routine)(void*); /* 任务函数 */ void *arg; /* 传入任务函数的参数 */ struct tpool_work *next; }tpool_work_t; typedef struct tpool { int shutdown; /* 线程池是否销毁 */ int max_thr_num; /* 最大线程数 */ pthread_t *thr_id; /* 线程ID数组 */ tpool_work_t *queue_head; /* 线程链表 */ pthread_mutex_t queue_lock; pthread_cond_t queue_ready; }tpool_t; /* * @brief 创建线程池 * @param max_thr_num 最大线程数 * @return 0: 成功 其他: 失败 */ int tpool_create(int max_thr_num)

odoo10 addon开发流程

回眸只為那壹抹淺笑 提交于 2020-01-10 06:18:03
odoo addon开发流程 创建一个addon(插件) 命令如下 python odoo-bin scaffold 插件名 路径 # 例如 python odoo-bin scaffold hh_todo_app myaddons # 需要将myaddons的路径添加到odoo.conf配置文件的addons_path参数中去 目录结构 开发To-do addon 创建huah_todo addon python odoo-bin scaffold huah_todo extra_addons 创建huah_todo addon在extra_addons,需将extra_addons的绝对路径添加到debian/odoo.conf中的addons_path参数中 编写__manifest__.py文件 # -*- coding: utf-8 -*- { 'name': "huah_todo",# addons在应用栏中的展示名 # 摘要 'summary': """ Short (1 phrase/line) summary of the module's purpose, used as subtitle on modules listing or apps.openerp.com""", # 描述 'description': """ Long description of

Linux下查看文件和文件夹大小

纵然是瞬间 提交于 2020-01-10 00:18:23
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。 du可以查看文件及文件夹的大小。 两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。 下面分别简要介绍 df命令可以显示目前所有文件系统的可用空间及使用情形 ,请看下列这个例子: 以下是代码片段: [yayug@yayu ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 3.9G 300M 3.4G 8% / /dev/sda7 100G 188M 95G 1% /data0 /dev/sdb1 133G 80G 47G 64% /data1 /dev/sda6 7.8G 218M 7.2G 3% /var /dev/sda5 7.8G 166M 7.2G 3% /tmp /dev/sda3 9.7G 2.5G 6.8G 27% /usr tmpfs 2.0G 0 2.0G 0% /dev/shm 参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。 上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted

etcd集群部署与遇到的坑(转)

删除回忆录丶 提交于 2020-01-09 03:20:00
在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑。今天记录一下,为了以后更好操作。 ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件; —wal-dir 指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储。 —name 节点名称 —initial-advertise-peer-urls 告知集群其他节点url. — listen-peer-urls 监听URL,用于与其他节点通讯 — advertise-client-urls 告知客户端url, 也就是服务的url — initial-cluster-token 集群的ID — initial-cluster 集群中所有节点 节点迁移 在生产环境中,不可避免遇到机器硬件故障。当遇到硬件故障发生的时候,我们需要快速恢复节点。ETCD集群可以做到在不丢失数据的,并且不改变节点ID的情况下,迁移节点。 具体办法是: 1)停止待迁移节点上的etc进程; 2)将数据目录打包复制到新的节点; 3)更新该节点对应集群中peer url,让其指向新的节点; 4)使用相同的配置,在新的节点上启动etcd进程 etcd配置 node1 编辑etcd启动脚本 /usr

Nginx概念和配置项用法篇一

大兔子大兔子 提交于 2020-01-07 07:59:30
一:理解Nginx 1:什么是Nginx   Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 2:Nginx特性   (1)更快   (2)高扩展性,Nginx的设计极具扩展性, 它完全是由多个不同功能、 不同层次、 不同类型且耦合度极低的模块组成。   (3)高可靠性   (4)低内存消耗   (5)单机支持10万以上并发连接   (6)热部署,即可以在7*24小时不间断提供服务 3:Nginx使用要求   1:内核为2.6以上版本的操作系统       [root@localhost ~]# uname -a     Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux   2:所需软件     1:gcc编译器       用户编译c语言程序 #yum install -y gcc     2:PCRE库       支持正则表达式       #yum install -y pcre pcre-devel     3:zlib库       zlib库用于对HTTP包的内容做gzip格式的压缩 。       #yum

python多进程编程中常常能用到的几种方法

人走茶凉 提交于 2020-01-07 00:51:07
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU资源,在python中大部分情况需要使用多进程。python提供了非常好用的多进程包Multiprocessing,只需要定义一个函数,python会完成其它所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、LocK等组件 一、Process 语法:Process([group[,target[,name[,args[,kwargs]]]]]) 参数含义:target表示调用对象;args表示调用对象的位置参数元祖;kwargs表示调用对象的字典。name为别名,groups实际上不会调用。 方法:is_alive():    join(timeout):    run():    start():    terminate(): 属性:authkey、daemon(要通过start()设置)、exitcode(进程在运行时为None、如果为-N,表示被信号N结束)、name、pid。其中daemon是父进程终止后自动终止,且自己不能产生新的进程,必须在start()之前设置。 1.创建函数,并将其作为单个进程 from multiprocessing import

银行家算法(Java实现)

99封情书 提交于 2020-01-06 19:04:44
  银行家算法是避免死锁的一种重要方法,采取的思路是预分配,尝试将资源分配给对应进程,然后判断新状态下是否状态安全,如果安全状态,则判断一下该对应进程是否满足执行的全部资源,如果满足,就回收掉该进程的资源,如果不满足则不作处理。如果是不安全状态,则进行状态的回退。 程序模块图 程序代码 Bank类: import java . util . * ; /** * */ public class Bank { /** * 资源可用数目 */ private int [ ] Available ; /** * 最大需求矩阵 */ private int [ ] [ ] Max ; /** * 已分配矩阵 */ private int [ ] [ ] Alloction ; /** * 需求矩阵 */ private int [ ] [ ] Need ; /** * 进程是否完成矩阵 */ private boolean [ ] Finish ; /** * 进程数组 */ private Process [ ] Processes ; /** * 安全状态进程 */ private List < Process > securityProcesses ; /** * 进程请求资源数组 */ private int [ ] request ; private boolean [ ] tmp

etcd集群部署与遇到的坑(转)

跟風遠走 提交于 2020-01-06 05:39:09
在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑。今天记录一下,为了以后更好操作。 ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,还会存储WAL文件; —wal-dir 指定节点的was文件的存储目录,若指定了该参数,wal文件会和其他数据文件分开存储。 —name 节点名称 —initial-advertise-peer-urls 告知集群其他节点url. — listen-peer-urls 监听URL,用于与其他节点通讯 — advertise-client-urls 告知客户端url, 也就是服务的url — initial-cluster-token 集群的ID — initial-cluster 集群中所有节点 节点迁移 在生产环境中,不可避免遇到机器硬件故障。当遇到硬件故障发生的时候,我们需要快速恢复节点。ETCD集群可以做到在不丢失数据的,并且不改变节点ID的情况下,迁移节点。 具体办法是: 1)停止待迁移节点上的etc进程; 2)将数据目录打包复制到新的节点; 3)更新该节点对应集群中peer url,让其指向新的节点; 4)使用相同的配置,在新的节点上启动etcd进程 etcd配置 node1 编辑etcd启动脚本 /usr

python多进程编程中常常能用到的几种方法

a 夏天 提交于 2020-01-05 10:54:52
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU资源,在python中大部分情况需要使用多进程。python提供了非常好用的多进程包Multiprocessing,只需要定义一个函数,python会完成其它所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、LocK等组件 一、Process 语法:Process([group[,target[,name[,args[,kwargs]]]]]) 参数含义:target表示调用对象;args表示调用对象的位置参数元祖;kwargs表示调用对象的字典。name为别名,groups实际上不会调用。 方法:is_alive():    join(timeout):    run():    start():    terminate(): 属性:authkey、daemon(要通过start()设置)、exitcode(进程在运行时为None、如果为-N,表示被信号N结束)、name、pid。其中daemon是父进程终止后自动终止,且自己不能产生新的进程,必须在start()之前设置。 1.创建函数,并将其作为单个进程 ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群

线段树 & 题目

夙愿已清 提交于 2020-01-05 03:11:29
首先说下我写的线段树吧。 我是按照线段树【完全版】那个人的写法来写的,因为网上大多数题解都是按照他的写法来写。 确实比较飘逸,所以就借用了。 节点大小是maxn是4倍,准确来说是大于maxn的2^x次方的最小值的两倍。 lson 和 rson 用宏定义写了。因为是固定的量。 线段树不必保存自身的区间,因为一边传递过去的时候,在函数里就有区间表示,无谓开多些无用的变量。 pushUp函数,更新当前节点cur的值,其实就是,线段树一般都是处理完左右孩子,然后再递归更新父亲的嘛,这个pushUp函数就是用来更新父亲的。感觉不用这个函数更加清楚明了。 pushDown函数,在lazy--upDate的时候有用,作用是把延迟标记更新到左右节点。 多次使用sum不用清0,add要。build的时候就会初始化sum数据。但其他用法就可能要 1 #define lson L, mid, cur << 1 2 #define rson mid + 1, R, cur << 1 | 1 3 void pushUp(int cur) { 4 sum[cur] = sum[cur << 1] + sum[cur << 1 | 1]; 5 } 6 void pushDown(int cur, int total) { 7 if (add[cur]) { 8 add[cur << 1] += add[cur]