多处理是一个很棒的工具,但不是那么直接使用大内存块.您可以在每个进程中加载块并将结果转储到磁盘上,但有时您需要将结果存储在内存中.最重要的是,使用花哨的numpy功能.
我已经阅读/ google了很多,并提出了一些答案:
如何在python子进程之间传递大型numpy数组而不保存到磁盘?
等等
他们都有缺点:不那么主流的图书馆(sharedmem); 全局存储变量; 不太容易阅读代码,管道等
我的目标是在我的工作人员中无缝使用numpy而不用担心转换和事情.
经过多次试验,我想出了这个.它适用于我的ubuntu 16,python 3.6,16GB,8核心机器.与以前的方法相比,我做了很多"快捷方式".没有全局共享状态,没有需要转换为numpy inside worker的纯内存指针,作为进程参数传递的大型numpy数组等.
上面是Pastebin链接,但我会在这里放几个片段.
一些进口:
import numpy as np
import multiprocessing as mp
import multiprocessing.sharedctypes
import ctypes
Run Code Online (Sandbox Code Playgroud)
分配一些共享内存并将其包装成一个numpy数组:
def create_np_shared_array(shape, dtype, ctype)
. . . .
shared_mem_chunck = mp.sharedctypes.RawArray(ctype, size)
numpy_array_view = np.frombuffer(shared_mem_chunck, dtype).reshape(shape)
return numpy_array_view
Run Code Online (Sandbox Code Playgroud)
创建共享数组并在其中放入一些内容
src = np.random.rand(*SHAPE).astype(np.float32)
src_shared = create_np_shared_array(SHAPE,np.float32,ctypes.c_float)
dst_shared = create_np_shared_array(SHAPE,np.float32,ctypes.c_float)
src_shared[:] = src[:] # Some numpy ops accept an 'out' array where to store the …Run Code Online (Sandbox Code Playgroud) 要在代码之前编写测试,您需要有一种方法来与代码进行交互.测试倾向于提前定义接口,以便可以编写测试.
但是,经常开发一个好的实现包括发明一组良好的组件间接口,多次调整和重新构建这些接口.在此期间,您要么继续重写测试代码的好部分,要么让测试落后于代码.
有没有最好的做法来缓解这种情况?
采用以下相当标准的代码:
from optparse import OptionParser
opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1)
options, args = opts.parse_args()
Run Code Online (Sandbox Code Playgroud)
假设-x并且-f是互斥的:当-x和-f明确存在时,应报告错误.
如何检测是否-x明确存在?即使不是,也options列出默认值.
一种方法是避免设置我宁愿不会做的默认值,因为--help打印默认值很好.
另一种方法是检查其中sys.argv的实例-x是否有点尴尬,如果有多个名称-x(即, - long-name)并且有多对互斥选项.
它有一个优雅的解决方案吗?
我确信之前已经回答了,但我找不到任何可以帮助我...
我正在尝试编写一个简单的程序来读取文件并搜索一个单词,然后打印该文件中找到该单词的次数.好吧,每当我输入"test.rtf"(这是我的文档的名称)时,我都会收到此错误...
Traceback (most recent call last):
File "/Users/AshleyStallings/Documents/School Work/Computer Programming/Side Projects/How many? (Python).py", line 9, in <module>
fileScan= open(fileName, 'r') #Opens file
FileNotFoundError: [Errno 2] No such file or directory: 'test.rtf'
Run Code Online (Sandbox Code Playgroud)
在上学期的课堂上,我似乎记得我的教授说你必须将文件保存在特定的地方?我不确定他是否真的这么说,但是如果有帮助的话,我正在运行苹果OSx.哈哈
这是我的代码,任何帮助表示赞赏:)提前致谢!
print ("Hello! Welcome to the 'How many' program.")
fileName= input("Please enter the name of the file you'd like to use. Make \
sure to include the correct extension!") #Gets file name
fileScan= open(fileName, 'r') #Opens file
cont = "Yes"
accumulator = 0
while cont == "Yes": …Run Code Online (Sandbox Code Playgroud) 问题:我无法在while循环中更新数组.插图(不是实际问题):
declare -A wordcounts
wordcounts["sentinel"]=1000
ls *.txt | while read f; do
# assume that that loop runs multiple times
wordcounts[$f]=$(wc -w $f)
echo ${wordcounts[$f]} # this prints actual data
done
echo ${!wordcounts[@]} # only prints 'sentinel'
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为管道在子shell中运行后循环.循环对变量所做的所有更改wordcounts仅在循环内可见.
说export wordcounts没有用.
唉,我似乎需要管道和while read部件,所以重写上面的代码的方法for并不是我想要的.
有没有合法的方法来更新循环中的关联数组形式,或者一般的子shell?
我有一个具有EmbeddedDocumentField的集合.我无法找到如何从集合中删除嵌入文档的示例.有人能为我提供一个例子或参考吗?
以下是我的设置:
码:
class Merchant(Document):
merchant_id = StringField(max_length=50)
merchant_name = StringField(max_length=150)
merchant_name_search_alias = StringField(max_length=150)
website = StringField(max_length=150)
location = ListField(EmbeddedDocumentField(Location))
address = StringField(max_length=50)
city = StringField(max_length=30)
state = StringField(max_length=20)
zipcode = IntField()
phone_nummber = StringField(max_length=10)
sub_lat = FloatField()
sub_lng = FloatField()
country = StringField(max_length=20)
promotion = ListField(EmbeddedDocumentField(Promotion))
class Promotion(EmbeddedDocument):
provider_name = StringField(max_length=50)
provider_website = URLField()
promo_name = StringField(max_length=300)
promo_name_search_alias = StringField(max_length=100)
retail_price = DecimalField(precision=2, force_string=True)
discount_price = DecimalField(precision=2, force_string=True)
deal_url = URLField()
buy_url = …Run Code Online (Sandbox Code Playgroud) 我有两个div要素; 其中一个侧面有滚动条:
+-------------+ ?
| div A | ?
+-------------+ ?
| |^|
| | |
| | |
| div B |=|
| | |
+-------------|v|
Run Code Online (Sandbox Code Playgroud)
我希望它的宽度div A与div B 减去滚动条的宽度一样宽.滚动条始终存在(通过显式overflow: scroll).OTOH div A具有固定高度,不需要滚动.我想要客户区域div A和div B对齐.
我可以使用JS进行人工滚动条控制.如果可能的话,我更喜欢基于CSS的本机外观解决方案.
?如果我知道滚动条的平台相关宽度是什么,我可以在图片上放置一个单独的填充.
有没有办法实现这一点,至少在现代浏览器中?
我正在使用decopt模块来处理python脚本选项:
from docopt import docopt
"""Usage:
./convert [ -h | -i | -t | -c ]
Options:
-h Show this help
-i Convert image to vertical scroll box
-t Convert text to vertical scroll box
-c Convert command list to html
"""
def main(docopt_args):
...
if __name__ == '__main__':
args = docopt(__doc__, version='v0.1')
main(args)
Traceback (most recent call last):
File "/home/ajn/Converter-yaml-to-html-blocks/convert.py", line 66, in <module>
args = docopt(__doc__, version='v0.1')
File "/usr/local/lib/python3.4/dist-packages/docopt.py", line 558, in docopt
DocoptExit.usage = printable_usage(doc)
File "/usr/local/lib/python3.4/dist-packages/docopt.py", …Run Code Online (Sandbox Code Playgroud) 我编写了一个脚本,它会点击 URL 并下载 zip 文件,然后解压缩。现在我在解析解压后得到的 CSV 文件时遇到问题。
import csv
from requests import get
from io import BytesIO
from zipfile import ZipFile
request = get('https://example.com/some_file.zip')
zip_file = ZipFile(BytesIO(request.content))
files = zip_file.namelist()
with open(files[0], 'r') as csvfile:
csvreader = csv.reader(csvfile)
for row in csvreader:
print(row)
Run Code Online (Sandbox Code Playgroud) 在这里查看http://hackage.haskell.org/package/vector-0.12.0.3/docs/Data-Vector-Mutable.html 可以看到读取类型为:
read :: PrimMonad m => MVector (PrimState m) a -> Int -> m a
Run Code Online (Sandbox Code Playgroud)
由于读取操作不会修改向量,所以我的主要问题是为什么不这样做:
read :: PrimMonad m => MVector (PrimState m) a -> Int -> a
Run Code Online (Sandbox Code Playgroud)
可变向量的长度在向量上也做不可变的事情,其类型 MVector s a -> Int看起来很正常。不是PrimMonad m => MVector (PrimState m) a -> m Int。那么,为什么在读取和长度之间做出设计选择上的差异,因为它们都是向量上的不变操作?
现在我考虑一下,以某种方式读取返回的单元格是对向量内部单元格的引用,而不是其数据的副本吗?如果是这样,我怎么能以可变的向量很好且廉价地获得对第n个元素的不变访问?我正在学习haskell,但不太了解细节。
谢谢,