C_Meng PSNA

Never wait for the storm to pass, just dance in the rain.

0%

原因

tensorboard命令不在环境变量中

解决思路

找到tensorboard脚本路径,然后运行

解决方法

1
python3 /home/USERNAME/.local/lib/python3.6/site-packages/tensorboard/main.py --logdir=LOGDIR

NOTE:

  • USERNAME是指用户名称
  • LOGDIR是指log文件存放的相对或绝对目录

导入包

1
import threading

构造方法:

Thread(group=None, target=None, name=None, args=(), kwargs={})

  • group: 线程组,目前还没有实现,库引用中提示必须是None;
  • target: 要执行的方法;
  • name: 线程名;
  • args/kwargs: 要传入方法的参数。

实例方法:

  • isAlive(): 返回线程是否在运行。正在运行指启动后、终止前。
  • get/setName(name): 获取/设置线程名。
  • start(): 线程准备就绪,等待CPU调度
  • is/setDaemon(bool): 获取/设置是后台线程(默认前台线程(False))。(在start之前设置)
    • 如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,主线程和后台线程均停止
    • 如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止
  • start(): 启动线程。
  • join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import threading

# Split items and run function through n threads
# func形如func(arg_list[0], ..., arg_list[n], items),run_through_threads 可以把items分为num份分配给num个线程运行
def run_through_threads(func, arg_list, items, num=4):
threads = []
item_len = len(items)
for i in range(num):
threads.append(threading.Thread(target=func, args=(*arg_list, items[int(i*item_len/num):int((i+1)*item_len/num)])))
for t in threads:
t.setDaemon(True)
t.start()
for t in threads:
t.join()

代码

1
2
3
4
5
6
7
8
9
10
#定义字典
dict = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
#根据key进行排序
dict_sorted_by_key = sorted(dict.items(), key=lambda d: d[0])
#根据key进行反向排序
dict_sorted_by_key_reverse = sorted(dict.items(), key=lambda d: d[0], reverse=True)
#根据value进行排序
dict_sorted_by_value = sorted(dict.items(), key=lambda d: d[1])
#根据value进行反向排序
dict_sorted_by_value_reverse = sorted(dict.items(), key=lambda d: d[1], reverse=True)

示例

导入模块

import os

读取目录下文件

os.listdir() #读取当前工作目录下文件名,返回列表
os.listdir(‘/username/folder_name/‘) #读取路径下所有文件名,返回列表

1
2
3
git fetch --all 
git reset --hard origin/master
git pull

note:出错的话就再试一次,说不定就可以了

概要

这篇文章介绍了何为pickle以及pickle模块的简单使用方法,即如何使用pickle进行存储存储以及数据的提取,关于pickle模块的其他更加详细的介绍可以参看https://docs.python.org/2/library/pickle.html

pickle简介

pickle模块是python中用来持久化对象的一个模块。所谓对对象进行持久化,即将对象的数据类型、存储结构、存储内容等所有信息作为文件保存下来以便下次使用。

就比如说你通过pickle将一个数组保存成了文件,那么当你下次通过pickle将这个文件读取出来的时候,你读取到的依然是一个数组,而不是一个看起来长得像数组的字符串。

用pickle保存对象到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#导入pickle模块
import pickle

#创建一个名为data1的对象
data1 = {'a': '123', 'b': [1, 2, 3, 4]}

#打开(或创建)一个名为data1.pkl的文件,打开方式为二进制写入(参数‘wb’)
file_to_save = open("data1.pkl", "wb")

#通过pickle模块中的dump函数将data1保存到data1.pkl文件中。
#第一个参数是要保存的对象名
#第二个参数是写入到的类文件对象file。file必须有write()接口, file可以是一个以'w'方式打开的文件或者一个StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。
#第三个参数为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效;-1:使用当前版本支持的最高协议。其中协议0和1兼容老版本的python。protocol默认值为0。
pickle.dump(data1, file_to_save, -1)

#关闭文件对象
file_to_save.close()

用pickle从文件中读取对象

(请接着上一个脚本运行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#导入pickle模块
import pickle

#打开一个名为data1.pkl的文件,打开方式为二进制读取(参数‘rb’)
file_to_read = open('data1.pkl', 'rb')

#通过pickle的load函数读取data1.pkl中的对象,并赋值给data2
data2 = pickle.load(file_to_read)

#打印data2
print data2

#关闭文件对象
file_to_read.close()

问题描述:

安装mysql-python时报错:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Collecting mysql-python
Using cached MySQL-python-1.2.5.zip
Complete output from command python setup.py egg_info:
sh: 1: mysql_config: not found
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-_itbcX/mysql-python/setup.py", line 17, in <module>
metadata, options = get_config()
File "setup_posix.py", line 43, in get_config
libs = mysql_config("libs_r")
File "setup_posix.py", line 25, in mysql_config
raise EnvironmentError("%s not found" % (mysql_config.path,))
EnvironmentError: mysql_config not found

----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-_itbcX/mysql-python/

问题原因:

没有安装libmysqlclient-dev。

解决方案:

执行:

sudo apt-get install libmysqlclient-dev

安装成功后,再运行pip install mysql-python即可。

问题原因

mysql配置文件中有一句:

bind-address = 127.0.0.1

导致mysql只能从本地进行连接。

解决思路

找到mysql的配置文件,将这一行注释掉。

具体解决方案

去两个配置文件中找这个配置项:

  1. /etc/mysql/my.cnf
  2. /etc/mysql/mysqld.cnf

在这两个文件的任意一个中找到

bind-address = 127.0.0.1

后,将其修改成:

#bind-address = 127.0.0.1

然后执行 service mysql restart重新启动mysql服务使配置生效即可。

问题原因

MySQL自带配置数据库mysql中的表user中,User=root一栏,Host的值为localhost,导致root用户只能通过本地登录。

解决思路

将User=root对应行的Host一栏的值修改为%,允许任意ip登录root。

具体解决方案

在本机登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称’%’即可

1
2
3
4
mysql -u root -p  
mysql>use mysql;
mysql>update user set host = '%' where user ='root';
mysql>flush privileges;